如何使用环回和 mongodb 将嵌套对象中的 属性 转换为 ObjectId?
How to cast property in nested objects to ObjectId with loopback and mongodb?
假设我有以下模型定义:
{
"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 一样访问)并且它应该是 casted 在插入和更新时添加到 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 并在数据库中保留为字符串。
玩环回和 mongodb 的人偶尔会遇到这个问题。
要解决环回中缺少 ObjectId 类型的问题:
- 一种方法确实是使用 属性 作为外键来描述关系,如本 post 中所讨论
-换句话说,更清晰的imo是将属性定义为JSON文件
中的id
见model definition documentation
例如:
{
"myId": {
"type": "string",
"id": true,
"generated": true
}
}
现在对此 属性 的请求将通过传递实际 objectId 或其字符串表示形式工作
假设我有以下模型定义:
{
"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 一样访问)并且它应该是 casted 在插入和更新时添加到 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 并在数据库中保留为字符串。
玩环回和 mongodb 的人偶尔会遇到这个问题。 要解决环回中缺少 ObjectId 类型的问题: - 一种方法确实是使用 属性 作为外键来描述关系,如本 post 中所讨论 -换句话说,更清晰的imo是将属性定义为JSON文件
中的id见model definition documentation
例如:
{
"myId": {
"type": "string",
"id": true,
"generated": true
}
}
现在对此 属性 的请求将通过传递实际 objectId 或其字符串表示形式工作