Я сделал findOneAndUpdate на NodeJS со следующим кодом
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
возвращает ноль.
например, ожидаемый документ
{
"_id": "mongoid",
"chat": [
{
"sidmessage": "id_of_message_A",
"usersid": "38jrc05h14avm14e",
"messageinfo": {
"text": "Message A"
},
"linkinfo": "something"
}
],
}
Примечания:
Документация Я использую.
Моя версия npm - 6.4.0
Моя версия драйвера MongoDB - 3.1.4