给出两个集合:
users:
name
posts:
title
user_id
如何有效地查询超过5个帖子的用户?
我可以使用$lookup
进行聚合,但对于大型数据集需要很长时间。
另一种选择是维持" postCount"在users
,但我想避免维持这一点。
我在节点上使用Mongoose。
答案 0 :(得分:1)
使用$lookup
和 $redact
管道进行过滤的高效汇总查询如下:
User.aggregate([
{
"$lookup": {
"from": "posts",
"localField": "_id",
"foreignField": "user_id",
"as": "posts"
}
},
{
"$redact": {
"$cond": [
{ "$gt": [ { "$size": "$posts" }, 5 ] },
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec(function(err, results){
if (err) throw err;
console.log(results);
})