猫鼬findOneAndUpdate文档中数组中的数组

时间:2020-06-03 08:12:00

标签: mongodb mongoose

我正在尝试更新一个位于文档中另一个数组内的数组。架构是这样的:

const projectSchema = new mongoose.Schema({
stakeholders: [{
    stakeholderTitle: {
        type: String,
    },
   ...
   subgroup: [{
        subgroupTitle: {
            type: String
        },
        subgroupPercent: {
            type: Number,
        }
    }]
}],

,我正在尝试更新“子组”数组。我已经使用位置查询this的答案,使用位置$运算符在其父级(利益相关者数组)上进行了查询。所以我的查询看起来像这样.....

await db.findOneAndUpdate({ find by the id }, { "stakeholders.$.stakeholderTitle": req.body.stakeholderTitle, ... "stakeholders.$.subgroup": req.body.subgroup })

但是,此查询不适用于“利益相关者子组”数组,并将其设置为null。浏览mongo docs中的位置运算符时,它指出“位置$运算符不能用于遍历一个以上数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$占位符的替换是一个值”,我想这可能是我的问题。

那么我该如何使用findOneAndUpdate查询呢?

1 个答案:

答案 0 :(得分:1)

根据我所看到的,您必须在子组数组中指定要更新的对象。试试这个-(即我正在更新子组数组的subgroupTitle);

await db.findOneAndUpdate(
  {
      _id: userId,
      "stakeholders.stakeholderTitle": req.body.stakeholderTitle,
      "stakeholders.stakeholderTitle.subgroup.subgroupTitle": req.body.subgroupTitle
  },
  {$set: {
      "stakeholders.stakeholderTitle.subgroup.$.subgroupPercent": somePercentValue,
      }
  },
);

还请注意,只有发现的阵列可以更新。它可能并不是您想要的,但是更近了