Mongodb:findOneAndUpdate的数组元素投影不起作用?

Che*_*rif 2 mongoose mongodb mongodb-query

我正在使用Mongoose,我正在尝试更新数组元素并将其更新回来.这是我的文档结构:

{   name:String,
    friends:[
        {   name:String,
            age:Number
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当我执行以下查询时,我得到了结果中的所有朋友,但我只想让25岁的朋友回来:

theCollection.findOneAndUpdate(
    {   name : 'cherif',
        'friends.name':'kevin'
    },
    {   $set:{
            'friends.$.age':25
        }
    },
    {   friends:
        {   $elemMatch:
            {   age : 25 } 
        }
    },
    function(err,result){
        if (!err) {
            console.log(result);
        }});
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 10

由于该文档findOneAndUpdate规定,你需要包括你的投影对象作为select该物业options参数:

theCollection.findOneAndUpdate(
    {   name : 'cherif',
        'friends.name':'kevin'
    },
    {   $set:{
            'friends.$.age':25
        }
    },
    {   select: { 
            friends: {
               $elemMatch: 
               {   age : 25 } 
            }
        }
    },
    function(err,result){
        if (!err) {
            console.log(result);
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 可以在这里使用$ projection吗?例如`Doc.findOneAndUpdate({_ id:id,'comments._id':cmtId},{...},{select:'comments.$':1})`.我试过这个,但奇怪的是它返回了`{comments:[{},{},{}],_id:...} (3认同)