子数组中的 MongoDB 更新查询
Posted
技术标签:
【中文标题】子数组中的 MongoDB 更新查询【英文标题】:MongoDB update query in subarray 【发布时间】:2021-08-24 12:48:53 【问题描述】:另一个对象数组中的对象数组的更新。
我正在处理的 mongodb 字段:
otherFields: values,
tasks: [
_id: mongodb.objectID(),
title: string,
items:[
_id: mongodb.objectID(),
title: string,
completed: boolean //field need to be update.
]
,
...
],
otherFields: value
sample mongodb document
我需要使用 task_id 和 item_id 查找文档并更新任务项目中的已完成字段。使用猫鼬 findOneAndUpdate 方法
const path = "tasks.$.items." + item_id + "completed";
collectionName.findOneAndUpdate(
_id: req.user._id, "tasks._id": taskID ,
$set: [path]: true );
上面的查询不起作用!!!
【问题讨论】:
到目前为止你有什么尝试? ``` const path = "tasks.$.items." + item_id +“完成”; collectionName.findOneAndUpdate( _id: req.user._id, "tasks._id": taskID , $set: [path]: true ); ```这行不通! 请编辑您的问题 (***.com/posts/67871554/edit) 并在此处添加代码。 【参考方案1】:无需使用多个查询条件,因为您想更新具有唯一 ID 的特定项目。因此,您可以使用类似的东西:
collectionName.findOneAndUpdate(
'tasks.items._id': itemID ,
...
);
请记住,这种结构远未优化,因为它基本上会查看整个数据库...
现在我想起来了,更新也会有问题,因为文档中有两个嵌套数组。在这里阅读更多:How to Update Multiple Array Elements in mongodb
【讨论】:
以上是关于子数组中的 MongoDB 更新查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 驱动程序更新 MongoDB 数组中的子文档