Mongodb 聚合对象';嵌套数组出现次数计数
我正试图以这种方式聚合日志,这样我就可以计算出特定用户对关键字的偏爱程度。我提出了以下问题:Mongodb 聚合对象';嵌套数组出现次数计数,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正试图以这种方式聚合日志,这样我就可以计算出特定用户对关键字的偏爱程度。我提出了以下问题: db.a.aggregate([ {$unwind: "$keywords"}, {$group : {_id : {word : "$keywords", user : "$favorited_by"}, count : {$sum : 1}}} ]); 但它产生了产出: { "_id" : { "word" : "another", "user" : "too_creepy" },
db.a.aggregate([
{$unwind: "$keywords"},
{$group : {_id : {word : "$keywords", user : "$favorited_by"}, count : {$sum : 1}}}
]);
但它产生了产出:
{ "_id" : { "word" : "another", "user" : "too_creepy" }, "count" : 1 }
{ "_id" : { "word" : "test", "user" : "too_creepy" }, "count" : 2 }
虽然我想得到这样的东西:
输入
输出
如果可能的话,您知道如何编写此查询吗?您可以通过向管道中添加第二个
$group
,然后添加最终的$project
来重新调整输出:
db.a.aggregate([
{$unwind:“$KEYONS”},
{$group:{$id:{word:$keywords],用户:$favorited_by“},计数:{$sum:1}}},
//再次在just user上分组,并使用$push组合他们的关键字数组
{$group:{
_id:“$\u id.user”,
关键词:{$push:{关键词:'$\u id.word',计数:'$count'}
}},
//重塑输出
{$project:{favorited_by:'$_id',关键字:1,_id:0}
]);
输出:
{
“关键字”:[
{
“关键字”:“另一个”,
“计数”:1
},
{
“关键字”:“测试”,
“计数”:2
}
],
“受宠者”:“太令人毛骨悚然”
},
{
“关键字”:[
{
“关键字”:“测试”,
“计数”:1
}
],
“受宠者”:“你好,世界”
}
{
_id: ObjectId("5475cf117ccee624583ba94a"),
favorited_by: "too_creepy",
keywords: [
"test"
]
},
{
_id: ObjectId("5475cf117ccee624583ba949"),
favorited_by: "too_creepy",
keywords: [
"test"
]
},
{
_id: ObjectId("5475cf117ccee624583ba949"),
favorited_by: "too_creepy",
keywords: [
"anotherone"
]
},
{
_id: ObjectId("5475cf117ccee624583ba09a"),
favorited_by: "hello_world",
keywords: [
"test"
]
}
{
favorited_by: "too_creepy",
keywords: [
{keyword: "test", count: 2},
{keyword: "anotherone", count: 1}
]
},
{
favorited_by: "hello_world",
keywords: [
{keyword: "test", count: 1}
]
}