NodeJS MongoDB投影不起作用

时间:2018-08-28 08:07:45

标签: javascript node.js mongodb npm

我用以下代码在NodeJS上做了一个findOneAndUpdate

var themessageid = "ID of message A"
workstreamchat.findOneAndUpdate(
    { 'chat.sidmessage': themessageid }, 
    { '$set': { 
        'chat.$.linkinfo': linkinfo 
    } }, 
    { returnOriginal: false }, 
    function(err, res) {
        console.log(res);            
    }
);

例如返回的文档

{
    "_id": "mongoid",
    "chat": [
        {
            "sidmessage": "id_of_message_A",
            "usersid": "38jrc05h14avm14e",
            "messageinfo": {
                "text": "Message A"
            }, 
            "linkinfo": "something" 
        },
        {
            "sidmessage": "id_of_message_B",
            "usersid": "38jrc05h14avm14e",
            "messageinfo": {
                "text": "MessageB"
            }
        }
    ]
}

它可以正常工作,并在整个数组中返回带有更新的特定对象的更新文档。

问题是我想使用投影仅返回带有更新文档的聊天数组。我尝试过

{ projection: { 'chat.$': 1 }, returnOriginal: false }

{ projection: { chat: chat.$ }, returnOriginal: false }

但是每次使用returnOriginal进行这种投影都会返回null。

例如预期文件

{
    "_id": "mongoid", 
    "chat": [
        {
            "sidmessage": "id_of_message_A",
            "usersid": "38jrc05h14avm14e",
            "messageinfo": {
                "text": "Message A"
            },
            "linkinfo": "something"
        }
    ],
}

注释:

我正在使用的documentation

我的npm版本是6.4.0

我的MongoDB驱动程序版本为3.1.4

1 个答案:

答案 0 :(得分:1)

在测试了多个案例之后,我设法找到了答案。

我需要的是。

{
     projection: { 
          chat: { 
              $elemMatch: { sidmessage: new ObjectId(id_of_message_A) } 
          }
     }, 
     returnOriginal: false 
}