如何将数组推入聚合管道并将其拉高一级?

时间:2018-05-17 13:37:27

标签: c# arrays mongodb

我是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":[{},{},...]} 我该如何显示这样的数据?

1 个答案:

答案 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"}}},
])

如果有帮助,请告诉我