子数组中的 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_iditem_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 数组中的子文档

如何使用C#驱动程序更新MongoDB数组中的子文档

Mongodb C#驱动程序在数组为空时更新所有子数组元素失败

MongoDB - 无法将时间戳字段添加到数组中的子文档

Mongodb怎样更新像这样的文档,数组里面有子文档

MongoDB:删除文档后更新子文档数组