【问题标题】:Mongoose findOneAndUpdate an array within an array within a documentMongoose findOneAndUpdate 文档内数组中的数组
【发布时间】:2020-09-21 20:54:37
【问题描述】:

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

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 })

但是,此查询不适用于“利益相关者子组”数组,并使其为空。通过mongo docs 查找位置运算符,它指出'位置 $ 运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为 $ 占位符的替换是单值”,我想这可能是我的问题。

那么如何使用 findOneAndUpdate 查询来做到这一点?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案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,
          }
      },
    );
    

    另外请注意,只有您发现可以更新的数组。它可能不是你想要的,但它离你更近了一步

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 2020-10-25
      • 2017-07-05
      • 2016-04-25
      • 1970-01-01
      • 2017-09-17
      • 2018-01-26
      相关资源
      最近更新 更多