如何更新猫鼬嵌套数组文档

时间:2019-05-13 11:14:38

标签: javascript node.js mongodb express mongoose

我知道这个问题是重复的,但我不知道为什么我被困住了

问题

如何使用"requirement.$.update"_id(以及需要的requirement.update._id)来查找requirement._id数组文档

// edit version number level2
  exports.editVersionNumberPost = function(req, res){ 
    var query = {
            date: req.body.date,
            number: req.body.number,
            description: req.body.description 
        }
    Project.findOneAndUpdate({ name:  req.params.name, 
                               "requirement._id" : req.params.versionID, 
                               "requirement.update._id" : req.params.versionNumID},  
        {"$set": 
            {"requirement.$.update" :  query 
        }   
        },  { new: true }, 
        function(err, obj){})
 };

我的模式

----------------
    namr: String
    requirement:[{
        version: Number,
        update:[{
            date: Date,
            number: Number,
            description: String
        }]
    }],
--------

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询

db.getCollection("test").updateOne(
  { "name":  req.params.name },
  { "$set": { "requirement.$[outer].update.$[inner].number": 100000 } },
  {
    "arrayFilters": [
      { "outer._id": mongoose.Types.ObjectId(req.params.versionID) },
      { "inner._id": mongoose.Types.ObjectId(req.params.versionNumID) }
    ]
  }
)