【问题标题】:How can can I query mongodb to compare arrays of objects?如何查询 mongodb 以比较对象数组?
【发布时间】:2019-07-02 04:07:37
【问题描述】:

我正在设计一个消息传递功能。我有一个用户集合,其中包含 ID、名字和姓氏等内容。我还有一个消息集合,其中包含一组值,如作者 ID、消息正文等。 最后,我有一个会话集合,其中包含一个 ID 和参与者,这是一个用户 ID 数组。

我认为这可能不是一个好的结构,因为我希望能够运行一个查询来返回给定用户具有消息历史记录的所有用户(ID、名字和姓氏)。就目前而言,我似乎无法运行一个查询来返回我需要的所有信息。我需要重组,还是有办法运行这个查询?

这是一个结构示例:

Conversation:
{ id: 123
  participants: ['<user ID here>', '<user ID here>'],
}

User:{
id:654,
firstName: John
lastName: Doe

Message:
{ sender: 'john', 
  content: 'howdy', 
  time_created: new Date(),
  converstationId: 123
},
{ sender: 'marry', 
  content: 'good u', 
  time_created: new Date(),
  converstationId: 123 
},

我尝试了以下几种变体,但除了一个空数组,我什么也没得到:

db.Users.aggregate([
    {
       $unwind: "$participants"
    },
    {
       $lookup:
          {
             from: "conversations",
             localField: "participants",
             foreignField: "_id",
             as: "response"
         }
    },
    {
       $match: { "response": { $ne: [] } }
    }
 ])

所以我的问题是: 如何获取参与者数组中与用户 ID 相关的所有用户?

【问题讨论】:

标签: node.js mongodb mongoose nosql


【解决方案1】:

您的问题有点含糊,但我假设您正在寻找 lookup 操作。 MongoDB查找操作类似于SQL join函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多