node.js - mongodb聚合中的日期过滤器

标签 node.js mongodb mongoose aggregation

我有一个用户数据条目集合,需要按用户名/ID 进行分组,并按每个用户出现的次数进行排序(一种条目的顶部列表)。

我设法用这段代码实现了它:

Entries.aggregate([
    {
        $group: {
            _id: { uid: "$uid", name: "$name" },
            count: { $sum: 1 },
            utime: { $max: "$utime" }
        }
    },
    { $match: { count: { "$gt": 0 } } }
]);

计数并匹配所有大于 0 的条目,如果不同用户的计数相同,则优先考虑较旧的条目(使用 utime)。

我现在需要的是包含一个自定义日期范围,在该范围内会发生相同的分组,因为这已应用于整个表。原生 mongodb 时间戳生效。

我怎样才能实现这个目标?任何建议将不胜感激。

最佳答案

感谢@rickhg12hs的建议,我设法获得了额外的匹配过滤器。唯一的要求是需要 ISODate 格式 - 否则什么都不会返回。使用矩库得到它。

Entries.aggregate([
    {
        $match: {
            utime: {
                $gte: new Date(moment( startDate ).format('YYYY-MM-DD[T00:00:00.000Z]')),
                $lt: new Date(moment( endDate ).format('YYYY-MM-DD[T00:00:00.000Z]'))
            }
        }
    },
    {
        $group: {
            _id: { uid: "$uid", name: "$name" },
            count: { $sum: 1 },
            utime: { $max: "$utime" }
        }
    },
    { $match: { count: { "$gt": 0 } } }
]);

关于node.js - mongodb聚合中的日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73759719/

相关文章:

javascript - 使用node.js从POST请求下载文件

node.js - Mongoose 模式中的数字类型始终保存为字符串

node.js - Mongoose 使用 presave 中间件推送到数组

mongodb - 如何将结果聚合并合并到一个集合中?

javascript - 点运算符不获取 Mongoose 文档对象的子属性

mongodb - 有人可以帮助我解释重复键错误发生时的mongo插入过程吗?

javascript - 找不到我从 Typescript 构建的 javascript 类

node.js - express.js 路由行为

javascript - 无法读取未定义nodejs的属性 'path'

mongodb 映射从子文档发出键