根据文档 ID 和子文档键筛选数组子文档



>我通过查询查找特定文档中的子文档

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}]}

您正在尝试查询嵌入文档的数组。

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);
   }
 }
})

您可以在此处了解如何查询嵌入文档数组。

最新更新