如何使用环回和 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 或其字符串表示形式工作