使用 $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 个字段 _id
和 count
。
【参考方案1】:
将$match放在$group之前
【讨论】:
以上是关于使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)的主要内容,如果未能解决你的问题,请参考以下文章
python 21:match对象的两个方法group()和groups()
无法使用 python match() 解析字符串 - 出现错误 AttributeError: 'NoneType' object has no attribute 'group'