NodeJS MongoDB Проекция не работает - PullRequest
0 голосов
/ 28 августа 2018

Я сделал 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

1 Ответ

0 голосов
/ 28 августа 2018

Мне удалось найти ответ после тестирования нескольких случаев.

Что мне нужно было.

{
     projection: { 
          chat: { 
              $elemMatch: { sidmessage: new ObjectId(id_of_message_A) } 
          }
     }, 
     returnOriginal: false 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...