首页 > 解决方案 > 返回nodejs和mongodb中嵌套数组的一项

问题描述

我只需要在 MongoDB 的嵌套数组中提取一项。

这是模型:

const docShema= new mongoose.Schema({
  value1: {
    type: String
  },
  mainArray: [{
    value2: {
      type: String
    },
    secondArray: [{
      subValue1: {
        type: String
      },
      subValue2: {
        type: String
      },
    }],
  }],
});

这是我尝试过的:

Collection.findOne({ "value1": "somevalue", "mainArray.secondArray.subValue1": "A" }, { "mainArray.secondArray.$": 1 }).exec((err, result) => {
  res.status(200).send(result)
})

以下是返回的内容:

{
_id: "5ef39f491ece670db31f1f39",
mainArray: [
    {
    value2: "firstvalue",
    _id: "5ef39f491ece670db31f1f73",
    secondArray: [
       {
       subValue1: "A",
       subValue2: "Red",
       _id: "5ef39f491ece670db31f1f79"
       },
       {
       subValue1: "B",
       subValue2: "Blue",
       _id: "5ef39f491ece670db31f1f78"
       },
       {
       subValue1: "C",
       subValue2: "Green",
       _id: "5ef39f491ece670db31f1f77"
       }
      ]    
    }
  ]
}

如您所见,mainArray 中的完整项目已返回。但我只想要第二个数组中的一个项目,然后在后续操作中我将只更新返回的部分。所以可以改用fineOneAndUpdate。我仅将 findOne 用于测试目的。

标签: node.jsmongodbmongoose

解决方案


您只能array-filters在单个查询中使用和更新它。参考:位置更新


推荐阅读