mongodb - 是否可以在 mongo db 中聚合 $$ROOT?
问题描述
我有以下 Mongo Collection。
[
{
"query": "a",
"page": "p1",
"clicks": 10,
"date": "x"
},
{
"query": "b",
"page": "p1",
"clicks": 5,
"date": "x"
},
{
"query": "a",
"page": "p1",
"clicks": 5,
"date": "y"
},
{
"query": "c",
"page": "p2",
"clicks": 2,
"date": "y"
},
]
输出应该是这样的:
[
{
"page" : "p1",
"most_clicks_query" : "a",
"sum_of_clicks_for_query" : 15
},
{
"page" : "p2",
"most_clicks_query" : "c",
"sum_of_clicks_for_query" : 2
},
]
获得此输出的逻辑:
我需要每个页面点击次数最多的查询名称(对于该查询)
我问的是:
- 我希望在一个聚合查询中得到这个结果。
- 所以我在玩 $$ROOT。
- 在这条路径中,现在我坚持对 $$ROOT 进行分组(以获得查询的点击总和)。
- 有人可以指导我更好地做到这一点吗?
解决方案
这是您正在寻找的聚合:
db.collection.aggregate([
{
"$group": {
"_id": {
"page": "$page",
"query": "$query"
},
"sum_of_clicks_for_query": {
"$sum": "$clicks"
}
}
},
{
"$project": {
"_id": false,
"page": "$_id.page",
"most_clicks_query": "$_id.query",
"sum_of_clicks_for_query": true
}
},
{
$sort: {
"sum_of_clicks_for_query": -1
}
},
{
$group: {
_id: "$page",
group: {
$first: "$$ROOT"
}
}
},
{
$replaceRoot: {
newRoot: "$group"
}
}
])
推荐阅读
- javascript - Google Maps API imagePath 本地图像不起作用
- c# - 如何从FB页面插件中获取哪个用户喜欢页面
- api - 使用 Paystack js 充值卡时遇到问题
- python - 无法使用 keras.load_model 保存/加载模型 - IndexError:列表索引超出范围
- java - Android Studio 两个按钮到两个页面
- dart - 参数类型“_PostCreateRoute”不能分配给参数类型“Route”
- python - 通过 django 中的数据库获取数据时出错
- python - 在一个散点图中绘制两个 pandas 数据框
- python - 转换熊猫数据框中的日期格式
- javascript - 选择 JSON 数据并使用 NODE.js 使用相同的数据对其进行编辑