如何在mongoose中查询多个集合

如何在mongoose中查询多个集合,mongoose,Mongoose,我有两个模式“用户”和“书籍” 用户:_id,i活动类型:布尔值 图书:userid ref Users,name 我想查询用户的isActive为真的书籍 我有一种方法,首先用isActive=true查询用户并返回userid列表,然后用userid列表中的userid查询书籍 谁能有其他更好的方法来质疑这种情况?谢谢。这取决于问题和您的收藏规模!当您的活动用户有限时,您的方法是好的。但是如果你有很多活跃用户,而你的藏书量很小,那么我建议你加载这些书,然后检查每个用户是否活跃 另外,如果您有

我有两个模式“用户”和“书籍”

用户:_id,i活动类型:布尔值

图书:userid ref Users,name

我想查询用户的isActive为真的书籍

我有一种方法,首先用isActive=true查询用户并返回userid列表,然后用userid列表中的userid查询书籍


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

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

另外,如果您有很多活动用户和书籍,那么将用户的活动状态存储在书籍中也不是一个坏主意。

引入了3.2版,其工作原理类似于管道中的左外连接

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

如果有大量用户,那么这太糟糕了,需要很长时间才能获得用户ID列表。