我正在尝试使用Loopback 3.0.0
与MongoDB
实现复合ID。每对product_id/keyword
都应该是唯一的......
我查看官方文档:
https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#data-mapping-properties
这是我的模特:
{
"name": "comparative",
"plural": "comparative",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"product_id": {
"id": true,
"type": "string",
"required": true
},
"keyword": {
"id": true,
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
尽管我尝试制作product_id / keyword的复合ID失败了。
当我发帖时:
// 1st POST Success.
{
"product_id": "string",
"keyword": "string"
}
// 2nd POST Success.
{
"product_id": "string1",
"keyword": "string"
}
// 3rd POST FAILED -> I want it to success
{
"product_id": "string",
"keyword": "string1"
}
有什么想法吗?
即使在那之后,我还需要保留一个自动生成的MongoDB id
来跟踪对象。
我试过“idInjection”,没有使用复合ID ...(没有生成任何东西......) 如果我将另一个字段“id”与生成的set添加为true,那么复合id根本不起作用(与之前的部分工作相反)
谢谢,
答案 0 :(得分:1)
您可以在product_id
和keyword
之间声明一个复合索引:
https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#indexes
{
"name": "comparative",
"plural": "comparative",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"product_id": {
"type": "string",
"required": true
},
"keyword": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {},
"indexes": {
"productid_keyword_index": {
"keys": {
"product_id": 1,
"keyword": -1
},
"options": {
"unique": true
}
}
}
}
答案 1 :(得分:0)
您不必将id: true
放入属性中。如果您不想要默认标识,则仅对单个字段执行此操作。 mongo中的_id
"properties": {
"product_id": {
"type": "string",
"required": true
},
"keyword": {
"type": "string",
"required": true
}
}
我假设您有另一个模型产品,您想要与此模型相关联。为了实现这一点,添加关系
检查this环回文档。
希望这有帮助