如何在mongoose中查询多个集合
我有两个模式“用户”和“书籍” 用户:_id,i活动类型:布尔值 图书:userid ref Users,name 我想查询用户的isActive为真的书籍 我有一种方法,首先用isActive=true查询用户并返回userid列表,然后用userid列表中的userid查询书籍如何在mongoose中查询多个集合,mongoose,Mongoose,我有两个模式“用户”和“书籍” 用户:_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列表。