【问题标题】:Filter array subdocument based on document id and sub document key根据文档 id 和子文档键过滤数组子文档
【发布时间】:2019-06-25 10:05:09
【问题描述】:

我通过查询在特定文档中找到子文档

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

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

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

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

    您可以阅读有关如何查询嵌入文档数组here 的信息。

    【讨论】:

    • 没用,我尝试时返回了一个空数组。以前我试过:docs.mongodb.com/manual/reference/operator/update/positional
    • 我已经更新了答案中的查询并使用了 $elemMatch 运算符来匹配包含数组字段且至少有一个元素与所有指定查询条件匹配的文档。
    • 您的查询中有语法错误。 let query = { _id: room_id, messages: { $elemMatch: { sender: user_id } } } 但它没有用。
    • 语法错误可能是由于属性名称的引号引起的。 let query = { "_id": room_id, { "messages": { $elemMatch: { "sender": user_id } } } } 如果您可以发布错误,我可以帮助您。
    • { "messages": { $elemMatch: { "sender": user_id } } } ^ SyntaxError: Unexpected token query should be an object
    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2014-06-10
    • 2017-10-17
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多