【问题标题】:How can I find two field from two different models in mongoDB?如何从 mongoDB 中的两个不同模型中找到两个字段?
【发布时间】:2020-10-15 04:19:07
【问题描述】:

第一个模型被称为 --> Post

第二个模型被称为-->用户

find ({fieldA = true in Post} 和 find ({fieldB = true in User}) 然后将结果作为 JSON 文件发送。

【问题讨论】:

  • 你期望你的“结果”是什么? PostUser,还是别的什么?
  • 结果将是帖子列表。
  • 您能描述一下Posts 与User 的关系吗?您是直接在 Mongo 中执行此操作,还是也可以执行一些 JavaScript?
  • 在帖子中,有一个我想要定位的字段,在用户模型中我需要检查另一个字段。因此,两个字段都必须为真才能找到要呈现的正确帖子。
  • 但是User 模型如何与Post 模型交互?为什么Post 会关心User 上的字段是否正确?这将如何影响您返回的 Posts?

标签: node.js reactjs mongodb express mern


【解决方案1】:

如果您想获取属于特定用户的所有帖子,并且还想添加对帖子记录的检查。

我们可以使用聚合函数来获取关系数据。

获取所有在请求学校的用户:

{
   $match: {
      school: req.body.school 
   }
}

使用查找可以通过额外检查获取用户的帖子

{
    $lookup: {
        from: "posts",
        let: {
            userId: "$_id"
        },
        pipeline: [
          { $match: {
               $expr: { $and: [
                  { $eq: [ "$schoolFeed", true ] },
                  { $eq: [ "$postedBy", "$$userId" ] }
              ] }
          } }
        ],
        as: "posts"
    }
}

最后的查询是:

User.aggregate([
{
    $match: {
        school: "test" 
    }
},
{
    $lookup: {
        from: "posts",
        let: {
            userId: "$_id"
        },
        pipeline: [
          { $match: {
               $expr: { $and: [
                  { $eq: [ "$schoolFeed", true ] },
                  { $eq: [ "$postedBy", "$$userId" ] }
              ] }
          } }
        ],
        as: "posts"
    }
}
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2019-11-23
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多