我用以下代码在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
答案 0 :(得分:1)
在测试了多个案例之后,我设法找到了答案。
我需要的是。
{
projection: {
chat: {
$elemMatch: { sidmessage: new ObjectId(id_of_message_A) }
}
},
returnOriginal: false
}