mongodb - MongoDB聚合和数组内公共字段的总和
问题描述
我正在尝试从我从 API 获得的这个 json 中获取按玩家姓名分组的所有胜利和战斗的列表:
[
{
"createdDate": 1541411260,
"players": [
{
"tag": "tag1234",
"name": "name1",
"battles": 2,
"wins": 1
},
{
"tag": "tag124567",
"name": "name2",
"battles": 1,
"wins": 0
},
{
"tag": "tag1234",
"name": "name3",
"battles": 3,
"wins": 3
}
]
},
{
"createdDate": 1541411460,
"players": [
{
"tag": "tag1234",
"name": "name1",
"battles": 1,
"wins": 1
},
{
"tag": "tag124567",
"name": "name2",
"battles": 1,
"wins": 1
},
{
"tag": "tag1234",
"name": "name3",
"battles": 0,
"wins": 0
},
{
"tag": "tag124567",
"name": "name4",
"battles": 1,
"wins": 0
}
]
},
{
"createdDate": 1541455260,
"players": [
{
"tag": "tag1234",
"name": "name1",
"battles": 0,
"wins": 0
},
{
"tag": "tag124567",
"name": "name2",
"battles": 4,
"wins": 4
},
{
"tag": "tag1234",
"name": "name3",
"battles": 6,
"wins": 6
}
]
}
]
我正在使用的 mongo 查询如下,但我无法获得名称和战斗/胜利:
db.getCollection("logs").aggregate([
{ $unwind : '$players' },
{
$group: {
_id: { name: '$players.name' },
numBattles: { $sum: '$players.battles' },
numWins: { $sum: '$players.wins' }
}
},
{
$project: {
name: "$_id.name",
numBattles: '$_id.numBattles',
numWins: '$_id.numWins',
_id: 0
}
]
).pretty();
这给了我 0 个结果。还尝试了以下方法,但它返回了一组完整的玩家及其统计数据:
db.getCollection("logs").aggregate([
{
$group: {
_id: { name: '$players.name' },
numBattles: { $sum: '$players.battles' },
numWins: { $sum: '$players.wins' }
}
},
{
$project: {
name: "$_id.name",
numBattles: '$_id.numBattles',
numWins: '$_id.numWins',
_id: 0
}
}
]
).pretty();
我们的想法是得到这样的结果:name1 - 3 场战斗和 2 场胜利,name2 - x 场战斗和 y 场胜利,...
有任何想法吗?谢谢你。
解决方案
在您的$project
阶段,您指的是_id
仅包含哪些name
字段,其他字段应直接引用,因此您只需将您的更改$project
为:
{
$project: {
name: "$_id.name",
numBattles: "$numBattles",
numWins: "$numWins",
_id: 0
}
}
推荐阅读
- boost - 在包含许多项目的解决方案中双重链接到附加库?
- c# - 来自 Graph API 共享 OneDrive 文件的不同响应
- hibernate - Gradle - 插件任务未执行
- java - 自动登录到 java 应用程序
- java - 尝试等待 CompletableFuture
- mysql - 如何使用 WHERE 子句查询两个日期范围之间的数据?- SQL
- c# - 如何编写可以为同一输入返回不同类型的扩展方法?
- firebase - 从 user_pseudo_id 检索 firebaseUID
- python - Tkinter 的条目列表
- android - 以十六进制显示来自 DB 的图片