node.js - 统计 Mongo 中引用对象的数量

标签 node.js mongodb mongoose mongodb-query aggregation-framework

给定两个集合,例如:

users:
    name

posts:
    title
    user_id

如何高效查询拥有超过 5 个帖子的用户?

我可以使用 $lookup 进行聚合,但这对于大型数据集来说需要很长时间。

另一个选择是在用户上维护“postCount”,但我希望避免维护它。

我在 Node 上使用 Mongoose。

最佳答案

使用 $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);
})

关于node.js - 统计 Mongo 中引用对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825338/

相关文章:

node.js - NodeJS Express - 渲染页面自动更新

javascript - Node : ShellJS not working with command line tools

node.js - Hogan.js 可分发文件

java - 多个 MongoDB 连接到多个 mongo 路由器 (mongos.exe)

node.js - 虚拟字段上的 Mongoose 正则表达式

node.js - Mongoose:如何在实例方法中访问实例的属性

node.js - 使用 Controller 内的 Express 和 Multer 解析请求

node.js - 同时填充多个字段

node.js - Mongoose save() 不返回 promise

node.js - 如何从 Mongodb 数据库中减去 ISOFormat [2018-08-11T12 :23:55. 627Z] 的时间?