数据列表如下:
"name": "测试问卷", "item": [ { "com": "checkBox", "label": "你不爱吃哪些水果泥", "options": { "list": [ "苹果", "香蕉", "草莓" ], "required": true }, "_id": "634e8ac85e2b3768d5c4e3bd" }, { "com": "radio", "label": "您的性别", "options": { "list": [ "男", "女" ], "required": true }, "_id": "634e8ac85e2b3768d5c4e3be" }]
需求很简单,想更新name为“测试问卷”的集合中,item数组中_id为634e8ac85e2b3768d5c4e3bd的值,仅仅是更新该子集,不更新文档其他字段。代码如下:
updateItem(name: string, itemID: string, model: { label: string, options: object }) {
return Model.updateOne({ name, item: { $elemMatch: { _id: itemID } } },
{ "item.$.label": model.label, "item.$.options": model.options },)
}
其中name参数就是传递“测试问卷”,eleMathch关键是,就匹配item下的_id为itemID的数据。最后使用item.$关键,更新符合条件的子集内容。