MongoDB 选择 * 分组依据
Posted
技术标签:
【中文标题】MongoDB 选择 * 分组依据【英文标题】:MongoDB SELECT * GROUP BY 【发布时间】:2020-09-28 08:36:12 【问题描述】:我正在玩 MongoDB,试图弄清楚如何做一个简单的
SELECT * FROM data GROUP BY userid
但我不知道怎么做?我有一个像
这样的集合data=[
_id: "Kcs93S4R9v",
userid: "KqDuEwgv",
time: 1584353953159,
content:
,
_id: "3d0c4375",
userid: "LqDuEwgv",
time: 1584353953159,
content:
,
_id: "574ee87",
userid: "LqDuEwgv",
time: 1584353953159,
content:
,
_id: "Pcs93S4R9v",
userid: "KqDuEwgv",
time: 1584353953159,
content:
]
我希望输出是这样的
[
_id: "Kcs93S4R9v",
userid: "KqDuEwgv",
time: 1584353953159,
content: [, ]
,
_id: "574ee87",
userid: "LqDuEwgv",
time: 1584353953159,
content: [, ]
]
但我似乎无法弄清楚。有没有办法用 MongoDB 做到这一点?
【问题讨论】:
【参考方案1】:您需要在聚合中使用$group
运算符。如下:
db.collection.aggregate([
$group:
_id: "$userid",
time:
$first: "$time"
,
content:
$push: "$content"
])
MongoPlayGroundLink
编辑:
要首先将文档与time
字段匹配,可以使用$match
运算符,
db.collection.aggregate([
$match:
time: 1584353953159
,
$group:
_id: "$userid",
time:
$first: "$time"
,
content:
$push: "$content"
])
【讨论】:
如果我必须根据时间进行此查询该怎么办,例如在特定时间戳中查找用户? 你的意思是找到特定时间的用户,然后像上面那样对他们进行分组? 是的,这是必需的。 我已经更新了我的答案,你需要使用$match
运营商。以上是关于MongoDB 选择 * 分组依据的主要内容,如果未能解决你的问题,请参考以下文章
mongodb 分组统计: 按deviceId、tenant分组,统计总记录条数、求和workload