Javascript Mongoose:更新嵌套文档数组

Javascript Mongoose:更新嵌套文档数组,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我的收藏如下: "_id" : ObjectId("5751f7892ae95d601f40411d"), "doc" : [ { "org" : ObjectId("5751f7892ae95d601f40411c"), "action" : 0, "_id" : ObjectId("5751f7892ae95d601f40411e") }, { "org" : ObjectId("57519

我的收藏如下:

   "_id" : ObjectId("5751f7892ae95d601f40411d"),

   "doc" : [
    {
        "org" : ObjectId("5751f7892ae95d601f40411c"),
        "action" : 0,
        "_id" : ObjectId("5751f7892ae95d601f40411e")
    },
    {
        "org" : ObjectId("5751952cace204c507fad255"),
        "action" : 1,
        "_id" : ObjectId("575217ce341cf6512b8dff39")
    }     ]
我想用组织:5751952cace204c507fad255更新文档中的操作字段 所以行动等于2 我知道这已经被回答了很多次了,但对我来说不起作用

以下是我尝试过但收藏没有改变的内容:

     Model.update(
    {
        "_id":ObjectId("5751f7892ae95d601f40411d"),
        "doc.org":ObjectId("5751952cace204c507fad255")
    },
    {
        "$inc": {
                "doc.$.action": 1
        }
    }
)

可以尝试使用位置运算符
$
来递增匹配的操作
文档。$操作

比如:


很抱歉,我在写问题的时候忘了把$放进去,事实上,即使使用了doc.$操作,我的收藏也没有更新。你可以尝试使用
“\u id”:req.body.modelId
mongoose.Types.ObjectId(“25…”)
两个
\u id
doc.org
我都试过了,但都没用,我还在Mongo shell中试过,当我将其添加到查询{upsert:true}时,我得到错误:“errmsg”:“位置运算符没有从查询中找到所需的匹配项。未展开的更新:doc.$.action”意味着根据匹配条件找不到任何文档。如果要更新特定的一个文档,请使用
Model.findOneAndUpdate()
从何处获取
ObjectId()
包装器?var ObjectId=require('mongoose')。Types.ObjectId;我还认为查找我的收藏时遇到问题,但我在相同条件下尝试了Model.find并打印了结果,我的收藏被成功找到。您是否尝试过在不包装字符串的情况下更新
\u id
s?是的,我尝试了两者。我认为我的问题不在于嵌套文档,因为我刚刚尝试更新集合的名称,因为它有一个字段名:db.Employee.update({u id:ObjectId(“575194e6ace204c507fad250”),{FName:“youssef”}),它说的是WriteResult({“nMatched”:1,“nUpserted”:0,“nModified”:1}),但是当我去看我的员工集合时,FName没有改变
//assume you passed modelId and orgId in request body
// According to your tag you may used mongoose so use mongoose.Types.ObjectId('5751f7892ae95d601f40411d') instead of ObjectId("5751f7892ae95d601f40411d")
// or direct req.body.modelId without convert
Model.update(
    {
        "_id": req.body.modelId,
        "doc.org": req.body.orgId
    },
    {
        "$inc": {
                "doc.$.action": 1
        }
    },
    function(error, updatedData) {
        if(error) {
            return res.status(400).send(error);
        }
        return res.status(200).send(updatedData);
    }
);