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

问题描述:

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

I know the question is duplicate but I dont know Why I am stuck

问题:

如何使用_idrequirement.update._id(如果需要,请使用requirement._id)查找来编辑"requirement.$.update"数组文档

How can I edit "requirement.$.update" array documents, using find by _id and requirement.update._id (and if needed 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
        }]
    }],
--------

您可以在下面的查询中使用

You can use below query

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