mongodb - 如何为嵌套文档定义猫鼬模式
问题描述
我需要为下面给出的嵌套文档定义猫鼬模式。
文件:
"Options":[{"Value":["28","30","32","34","36","38","40","42","44","46"],"_id":{"$oid":"5de8427af55716115dd43c8f"},"Name":"Size"},{"Value":["White"],"_id":{"$oid":"5de8427af55716115dd43c8e"},"Name":"Colour"}]
我在下面声明,但它不起作用。
const Product = new Schema(
{
Options: [{ value: { _id: ObjectId, Name: String } }]
},
{
timestamps: {
createdAt: "createdAt",
updatedAt: "updatedAt"
},
collection: "products"
}
);
在这里,我需要架构,如果我将直接添加/更新同一个文档,那么它将被添加。
解决方案
您需要像这样修改您的架构:
{
Options: [ new Schema ({ value: [...], _id: Schema.Types.ObjectId, Name: String })]
}
这是使用 Mongoose创建子文档数组的方法。如果你不使用“new Schema”关键词,你实际上是在创建一个类型为“Mixed”的字段,它需要一种不同的方式来处理更新。
您也可以省略 _id,它应该会自动添加。
您可以在此页面上找到有关子文档的更多信息: https ://mongoosejs.com/docs/subdocs.html
...以及混合类型字段:https ://mongoosejs.com/docs/schematypes.html#mixed
...这将很快解释这个问题。
推荐阅读
- javascript - 使用 CORS 问题从 S3 获取图像
- node.js - locahost 在 React 组件编辑时返回 ERR_CONNECTION_REFUSED
- php - php中的正则表达式:多种可能性
- javascript - Odoo V12 JavaScript 框架
- time - 如何在工作流中将 Oozie 的协调器时间传递给 SLA 参数nominal_time?
- typescript - NUXT 在项目位置之外使用共享样式和脚本
- java - 如果我使用 Azure APIM,我应该如何在我的 REST API 中添加授权?
- oop - 如果我创建了一个 A 类的对象,但也存在同名的 A 的重复类,会发生什么?
- html - 在边缘浏览器数据列表下拉字体不同,但在 chrome 中它类似于网站字体
- java - 如何在spark(java)中遍历数据集的所有列