【问题标题】:How do I find a mongoDB document and a second one based on its id as property of the first (like an inner join)如何根据第一个属性的 id 找到一个 mongoDB 文档和第二个文档(如内部连接)
【发布时间】:2021-04-11 18:14:15
【问题描述】:

我正在尝试在 node.js-expres 设置中使用 mongoose 获取模型“对话”的所有 mongodb 文档。我使用 .find() 方法成功地做到了这一点。但是现在我想根据作为会话模型的属性给出的“用户”文档 id 来获取对话文档和相应的“用户”文档,我想同时获取它们对象。

所以一个草图:对话模型有“_id”、“sender_id”和“recipient_id”。一个用户有“first_name”、“last_name”、“email”和“password_hash”。

我想获取一个对象,其中包含所有属性以及 _id 等于收件人 ID 的用户的 _id、名字、姓氏、电子邮件和密码。

但我似乎无法在互联网上找到这个。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    如果在对话模型中,receiver_id 的类型为 ObjectId 并引用 User,那么您可以使用 populate() 函数自动获取引用的文档。

    假设你的用户模型被称为用户,那么在对话模式中,你应该有:

    recipient_id: { type: Schema.Types.ObjectId, ref: 'User' }
    

    然后在您的查找请求中,您可以添加.populate()

    Conversations.find().populate("recipient_id")
    

    返回的文档应包含接收者 ID 中的整个关联用户文档。

    对于此类更复杂的请求,您还可以查看$lookup (aggregation)。不过,填充应该足以满足您的情况。

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 2021-08-23
      • 2017-03-07
      • 2018-08-19
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      相关资源
      最近更新 更多