首页 > 解决方案 > 子数组中的 MongoDB 更新查询

问题描述

另一个对象数组中的对象数组的更新。

我正在处理的 mongodb 字段:

otherFields: values,

tasks: [
 {
  _id: mongodb.objectID(),
  title: string,
  items:[{
   _id: mongodb.objectID(),
   title: string,
   completed: boolean        //field need to be update.
  }]
 },
 {}...
],

otherFields: value

示例 MongoDB 文档

我需要使用task_iditem_id查找文档并更新任务项目中的已完成字段。使用猫鼬findOneAndUpdate方法

const path = "tasks.$.items." + item_id + "completed";
collectionName.findOneAndUpdate( 
{ _id: req.user._id, "tasks._id": taskID }, 
{ $set: { [path]: true }}); 

以上查询无效!!!

标签: node.jsarraysmongodbobjectmongoose

解决方案


无需使用多个查询条件,因为您想更新具有唯一 ID 的特定项目。因此,您可以使用类似的东西:

collectionName.findOneAndUpdate(
  { 'tasks.items._id': itemID },
  ...
);

请记住,这种结构远未优化,因为它基本上会查看整个数据库......


现在我想起来了,你也会有更新的问题,因为文档中有两个嵌套数组。在此处阅读更多内容:如何在 mongodb 中更新多个数组元素


推荐阅读