假设我有以下模型定义:
{
"name": "Report",
"idInjection": true,
"trackChanges": true,
"mongodb": {
"collection": "report"
},
"properties": {
"resource" : {"type": "String"},
"date" : {"type": "Date"},
"people" : [ {
// Here's where I like to have an id property.
"role" : {"type": "String"},
"hours" : {"type": "Number"}
} ],
"name" : {"type": "String"}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
现在我希望在people数组中的每个对象中都有id属性(使用类似report.people [0] .id进行访问)并且在插入和更新时应该已经到ObjectId。但是,loopback没有ObjectId
类型,唯一的方法似乎是使用关系,但那么外键应该如何呢?
有没有办法在插入和更新时将id属性转换为ObjectId?
更新
我尝试使用embedsMany,但未转换ID:
这是我的report.json:
{
"name": "Report",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {
"people" : {
"type": "embedsMany",
"model": "ReportPerson",
"options": {
"validate": true,
"autoId": false
}
}
},
"acls": [],
"methods": []
}
这是我的报告-person.json:
{
"name": "ReportPerson",
"base": "Model",
"idInjection": true,
"properties": {
"hours": {"type" : "number"}
},
"validations": [{
"person" : {
"model": "Person",
"type": "belongsTo",
"foreignKey": "id"
}
}],
"relations": {},
"acls": [],
"methods": []
}
当我尝试使用http API插入此Report
时:
{
"name" : "report",
"people" : [
{
"id" : "54c7926e1d621dc65495f069",
"hours" : 2
}
]
}
id
不会被转换为ObjectId并在数据库中保持为字符串。
答案 0 :(得分:1)
任何玩环回和mongodb的人都会偶尔点击这个。 为了解决环回中缺少ObjectId类型的问题: - 一种方法是确实描述使用属性作为外键的关系,如本文所述 - 另一方面,更清洁的imo是将属性定义为JSON文件中的id
请参阅model definition documentation
例如:
{
"myId": {
"type": "string",
"id": true,
"generated": true
}
}
现在,对此属性的请求将通过执行actuel objectId或其字符串表示