Фильтровать вложенный документ массива на основе идентификатора документа и ключа вложенного документа - PullRequest
0 голосов
/ 31 января 2019

Я нахожу вложенные документы в конкретном документе по запросу

await Conversations.find(
{_id: room_id,"messages.sender": user_id}, function(err, success){
if(success){
  console.log("success",success)
  for (r of success){
    console.log(r);
  }
}

})

Но вышеуказанный запрос находит все сообщения в этом документе.Каков наилучший способ решения этой проблемы вместо использования агрегата?Я должен написать запрос на изменение

Моя коллекция выглядит так:

{"data":{"_id":"5c2d4c2b116da2322616c387","messages":[{"msg_type":"text","time_created":"2019-01-03T00:03:25.055Z","_id":"5c2d514d70407c00102a67b2","sender":"0360a5ac-4b51-4c4d-b8b6-c6bad088135b","content":"Hi","seen":true},{"msg_type":"text","time_created":"2019-01-03T00:04:27.583Z","_id":"5c2d518b70407c00102a67b3","sender":"47a36731-f245-4c62-8a34-d7bc034634c9","content":"hi","seen":true},{"msg_type":"text","time_created":"2019-01-03T00:04:33.422Z","_id":"5c2d519170407c00102a67b4","sender":"0360a5ac-4b51-4c4d-b8b6-c6bad088135b","content":"Great","seen":true},{"msg_type":"text","time_created":"2019-01-03T00:04:39.487Z","_id":"5c2d519770407c00102a67b5","sender":"0360a5ac-4b51-4c4d-b8b6-c6bad088135b","content":"We have some conversations","seen":true}]}

1 Ответ

0 голосов
/ 01 февраля 2019

Вы пытаетесь запросить массив встроенных документов.

let query = {
  _id: room_id,
  { messages: { $elemMatch: { sender: user_id } } }
}
await Conversations.find(query, function(err, success){
  if(success) {
   console.log("success",success)
    for (r of success) {
     console.log(r);
   }
 }
})

Вы можете прочитать о том, как запросить массив встроенных документов здесь .

...