我有一个用户数据条目集合,需要按用户名/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/