Javascript 如何使用环回和mongodb将嵌套对象中的属性强制转换为ObjectId?
假设我有以下模型定义:Javascript 如何使用环回和mongodb将嵌套对象中的属性强制转换为ObjectId?,javascript,node.js,mongodb,casting,loopbackjs,Javascript,Node.js,Mongodb,Casting,Loopbackjs,假设我有以下模型定义: { "name": "Report", "idInjection": true, "trackChanges": true, "mongodb": { "collection": "report" }, "properties": { "resource" : {"type": "String"}, "date" : {"type": "Date"}, "people" : [ { // Here's
{
"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": []
}
现在,我希望在人员数组中的每个对象中都有id属性(可以通过类似report.people[0].id的方式访问),并且在插入和更新时,它应该被强制转换为ObjectId。但是,环回没有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": []
}
下面是我的report-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插入此报告时:
{
"name" : "report",
"people" : [
{
"id" : "54c7926e1d621dc65495f069",
"hours" : 2
}
]
}
id
不会被强制转换为ObjectId,而是作为字符串保留在数据库中。任何玩loopback和mongodb的人都会偶尔点击这个。
要解决环回中缺少ObjectId类型的问题,请执行以下操作:
-一种方法是使用属性作为外键来描述关系,如本文所述
-另一种方法是将属性定义为JSON文件中的id
看
例如:
{
“myId”:{
“类型”:“字符串”,
“id”:对,
“生成”:真
}
}
现在,对该属性的请求将与传递actuel objectId或其字符串表示一起工作您签出了吗?@RaymondFeng我更新了我的问题。@FaridNouriNeshat您成功解决了这个问题吗?