【问题标题】:How to query multiple collections in mongoose如何在猫鼬中查询多个集合
【发布时间】:2017-04-18 18:02:45
【问题描述】:

我有两个架构“用户”和“书籍”。

用户:_id,isActive 类型:布尔

书籍:userid ref 用户、姓名

我要查询用户的isActive为真的Books。

我有一种方法是首先使用 isActive=true 查询用户并返回用户 ID 列表,然后在用户 ID 列表中使用用户 ID 查询图书。

谁能有其他更好的方法来查询这种情况?谢谢。

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    3.2 版引入了$lookup,其工作方式类似于aggregation 管道中的左外连接。

    User.aggregate([
        {
            $match: {isActive: true}
        },
        {
            $lookup: //left outer join
            {
                from: "books",
                localField: "_id",
                foreignField: "userid",
                as: "books"
            }
        },
        {
            $unwind: "$books" // convert each element of "books" array into its own document
        },
        {
            $replaceRoot: { newRoot: "$books" } // remove "books" key. Bring its content out in the root
        }
    
    ]).exec(function(err, books) {
        // books with users isActive true
    })
    

    请注意,我们使用User 进行聚合是因为我们要查询isActive: true,但是在处理聚合管道中的文档后,我们最后会得到books

    【讨论】:

      【解决方案2】:

      这取决于您收藏的问题和大小!当您的活跃用户有限时,您的方法很好。但是,如果您有很多活跃用户,而您的图书收藏量很小,那么我建议您加载图书,然后检查每个用户是否处于活跃状态!

      此外,如果您有大量活跃用户和大量书籍,那么将用户的活跃状态存储在 Book 中也不是一个坏主意。

      【讨论】:

      • 那太糟糕了,如果有大用户,那么获取用户ID列表需要很长时间。
      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 2022-11-10
      • 2017-09-24
      • 2020-08-07
      • 2021-08-04
      • 2020-08-14
      • 2017-12-03
      • 2021-11-25
      相关资源
      最近更新 更多