我是MongoDB的新手,我正在开发C#和MongoDB的软件。我的数据结构是这样的
{
"Id": 1,
"Title": "myTitle",
"Geners": [ "Drama", "Action" ],
"Category": 1,
"Casts": [
{
"Id": 1,
"Name": "myName",
"Gender": "Male",
"Age": 35
},
{
"Id": 2,
"Name": "herName",
"Gender": "Female",
"Age": 30
},
{
"Id": 3,
"Name": "hisName",
"Gender": "Male",
"Age": 45
}
]
}
这只是一份文件,我有大约500万份文件。我想运行如下的查询来计算基于Category
的记录,并向我展示我在每个类别中有多少部电影,我想将Casts字段放在结果中。
db.getCollection('myCollection').aggregate([
{
$group:{"_id":"$Category", "count": {$sum:1},
"Casts":{$push:"$Casts"}}
}
])
这接近我想要的东西,但问题是,它将Casts
数据放在第二级数组中,如{"Id":1, ... , "Casts":[[{},{},...]]}
,但我需要这样{"Id":1, ... , "Casts":[{},{},...]}
我该如何显示这样的数据?
答案 0 :(得分:0)
如果可以接受重复,那么以下聚合就足够了:
db.getCollection('myCollection').aggregate([
{ $unwind:"$Casts"},
{
$group:{"_id":"$Category", "count": {$sum:1},
"Casts":{$push:"$Casts"}}
}
])
更新: 由于您需要计数才有效,因此还需要进行一些操作。
db.getCollection('myCollection').aggregate([
{ $group:{"_id":"$Category", "count": {$sum:1}, "Casts":{$addToSet:"$Casts"}}},
{$unwind:"$Casts"},
{$unwind:"$Casts"},
{ $group:{"_id":"$_id", "count": {$first:"$count"}, "Casts":{$addToSet:"$Casts"}}},
])
如果有帮助,请告诉我