Tho*_*mar 3 mongodb aggregation-framework
我有以下数据集:
{
"_id" : ObjectId("57684f2b61f2af6d49fa6dbd"),
"firstname" : "First1",
"surname" : "Sur1",
"email" : "first1@sur1.com",
"goals" : [
{
"gId" : "base1",
"recordDate" : ISODate("2016-06-21T20:05:48.972Z")
},
{
"gId" : "base2",
"recordDate" : ISODate("2016-06-21T20:05:48.972Z")
},
{
"gId" : "base1",
"recordDate" : ISODate("2016-06-21T20:05:48.972Z")
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要以下结果:
{
"_id" : ObjectId("57684f2b61f2af6d49fa6dbd"),
"firstname" : "First1",
"surname" : "Sur1",
"email" : "first1@sur1.com",
"goals" : [
{
"gId" : "base1",
"count" : 2
},
{
"gId" : "base2",
"count" : 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用了聚合查询,但找不到解决问题的方法。我的查询看起来像那样,但它不起作用。第一个位$project本身运行良好,也是如此$unwind,$group但我不知道如何将它组合在一起。
db.getCollection('users').aggregate(
{
$project : {
firstname: "$firstname",
surname: "$surname",
email: "$email",
goals: "$goals"
}
},
{
$unwind: '$goals'
},
{
$group: {
gid: '$goals.gId',
count: {'$sum': 1}
}
}
)
Run Code Online (Sandbox Code Playgroud)
提前致谢,汤姆
尝试使用以下管道
db.getCollection('users').aggregate(
{
$unwind: '$goals'
},
{
$group: {
_id: {
firstname: "$firstname",
surname: "$surname",
email: "$email",
gId: "$goals.gId"
},
count: {'$sum': 1}
}
},
{
$group: {
_id: {
firstname: "$_id.firstname",
surname: "$_id.surname",
email: "$_id.email"
},
goals: {
$push: {
gId: "$_id.gId",
count: "$count"
}
}
}
},
{
$project: {
_id: 0,
firstname: "$_id.firstname",
surname: "$_id.surname",
email: "$_id.email",
goals: 1
}
}
)
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样
{
"goals" : [
{
"gId" : "base2",
"count" : 1.0
},
{
"gId" : "base1",
"count" : 2.0
}
],
"firstname" : "First1",
"surname" : "Sur1",
"email" : "first1@sur1.com"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11062 次 |
| 最近记录: |