Json 确保环回模型中的字段值唯一

Json 确保环回模型中的字段值唯一,json,node.js,strongloop,loopbackjs,Json,Node.js,Strongloop,Loopbackjs,如何确保环回模型中特定字段的唯一性。 就像下面的模型文章一样,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并且在重复密钥插入时通过一个错误返回到 { "name": "Post", "plural": "Post", "base": "PersistedModel", "properties": { "genericId": { "type": "string", "required":True }, "mo

如何确保环回模型中特定字段的唯一性。 就像下面的模型文章一样,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并且在重复密钥插入时通过一个错误返回到

{
  "name": "Post",
  "plural": "Post",
  "base": "PersistedModel",
  "properties": {
    "genericId": {
      "type": "string",
      "required":True 
    },
    "moderatedAt": {
      "type": "date"
    }
  },
  "validations": [],
  "acls": [],
  "methods": []
}
我曾尝试在那里搜索文档和其他示例,但没有成功。
我能想到的一个解决方案是,为create函数创建一个remoteHook,并在插入之前验证此字段,但寻找其他方法。

不确定这是否是实现唯一性的更好方法,但文档中介绍了如何为模型编制索引

{
  ...
    "genericId": {
      "type": "string", 
      "id": true,       // Ensure uniqueness and avoid another model id field
      "generated": true // Add this if you want Loopback to manage id content for you
    },
 ...
}
只要在你想要的字段上添加一个唯一的索引,瞧

对于您的模型,这将是:

{
  ...
    "genericId": {
      "type": "string",
      "required": True,
      "index": {"unique": true} 
    },
 ...
}
但是,如果
genericId
字段是模型的实际Id,我建议您将其声明为实际Id,这样您就可以使用
findById
方法,还可以避免创建重复的
Id
字段,如果您不在模型中声明任何字段,就会出现这种情况

{
  ...
    "genericId": {
      "type": "string", 
      "id": true,       // Ensure uniqueness and avoid another model id field
      "generated": true // Add this if you want Loopback to manage id content for you
    },
 ...
}
common/models/post.js中设置规则

Post.validatesUniquenessOf('genericId');

回溯v4解决方案如下所示:

@model()
export class Client extends Entity {

  @property({
    type: 'string',
    required: true,
    index: {
      unique: true,
    },
  })
  name: string;

}
然后必须更新您的架构:

npm run migrate
或者重新创建它:

npm run migrate -- --rebuild

您还可以直接在数据库上强制唯一性是的,Strongloop的LoopbackJS文档非常糟糕。感谢您的解决方案,但我们已经得到了它,很抱歉忘记在此处更新。正确的验证文档仅支持连接器:内存中,Oracle或MongoDBWhat,如果我想保持字段组合的唯一性,您可以花费“…声明为这样”吗?谢谢。注意:这是一篇旧文章,不确定它是否仍然有效。在上面的消息中,代码对解释进行了扩展:通过在字段json定义中设置
ID
prop(到
true
),将字段声明为模型ID。是否更新了架构
npm run migrate
npm run migrate--rebuild
?并非每个连接器都支持此功能。我查了一下PostgreSQL。我想MySQL也是受支持的。