使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)

Posted

技术标签:

【中文标题】使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)【英文标题】:mongoDB query using $match and $group (filter last 24 hours logged data and group with id and count) 【发布时间】:2021-04-16 03:06:12 【问题描述】:

我想要做的是,只过滤最近 24 小时的日志和 按 userId 分组并计算它记录了多少次

这是我的 mongoDB 集合的架构

Key Type
timestamp(ISODate) Date
... ...
transactionLogs_docs Array
    - [0] Object
        - userId String
        - ... ...

以下是我的 MongoDB 查询语句

db.getCollection('integrated_transaction_logs').aggregate(
[                 
                '$group' : 
                
                    '_id' : '$transactionLogs_docs.userId', 
                    'count' : '$sum' : 1 
                ,
                '$match' : 'timestamp' : '$gte' : new Date(new Date().getTime() - 86400000 * 30), '$lte' : new Date()  
])

只有 $match 或 $group 它可以工作,但是当我把它们放在一起时, 它不起作用....:S

【问题讨论】:

每个阶段都应该在单独的 对象括号中,您已将两个阶段添加到同一个对象中,请参阅playground 我在 *** 上写的时候发错了:抱歉刚刚修改了它。但它仍然不起作用......对我有什么建议吗? :S @turivishal 记住:将 $match 阶段放在 $group 之前以获得更好的性能并过滤掉什么 您需要了解阶段的第一次使用以及管道阶段的工作原理,请参阅$group,并且您不能在$match 阶段中​​使用timestamp,因为您尚未在$group 中定义该字段阶段,根据您的查询,您只能访问 $match 阶段中​​的 2 个字段 _idcount 【参考方案1】:

将$match放在$group之前

【讨论】:

以上是关于使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)的主要内容,如果未能解决你的问题,请参考以下文章

python 21:match对象的两个方法group()和groups()

Mongodb聚合查询$match和$group

MongoDB $match $group 查询慢

具有不同 $match 的嵌套 $group

无法使用 python match() 解析字符串 - 出现错误 AttributeError: 'NoneType' object has no attribute 'group'

C#正则表达式编程:Match类和Group类用法