elasticsearch,mongodb-query,aggregation-framework,Mongodb,elasticsearch,Mongodb Query,Aggregation Framework" /> elasticsearch,mongodb-query,aggregation-framework,Mongodb,elasticsearch,Mongodb Query,Aggregation Framework" />

Mongodb中基于聚合的聚合

Mongodb中基于聚合的聚合,mongodb,elasticsearch,mongodb-query,aggregation-framework,Mongodb,elasticsearch,Mongodb Query,Aggregation Framework,我有一个mongo文件集,里面有印度的州、区和村庄 { "_id" : ObjectId("58db5a5f8f7b5013ad477564"), "district" : "Chittor", "state" : "Andhra Pradesh", "village" : "Chittoor" }, { "_id" : ObjectId("58db5a628f7b5013ad477566"), "district" : "Dibrugarh",

我有一个mongo文件集,里面有印度的州、区和村庄

{
    "_id" : ObjectId("58db5a5f8f7b5013ad477564"),
    "district" : "Chittor",
    "state" : "Andhra Pradesh",
    "village" : "Chittoor"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad477566"),
    "district" : "Dibrugarh",
    "state" : "Assam",
    "village" : "Dibrugarh"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad47756d"),
    "district" : "Lakhimpur",
    "state" : "Assam",
    "village" : "Kadam"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad47756e"),
    "district" : "Sonitpur",
    "state" : "Assam",
    "village" : "Helem"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad477572"),
    "district" : "Gandhinagar",
    "state" : "Gujarat",
    "village" : "Mansa"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad477573"),
    "district" : "Gandhinagar",
    "state" : "Gujarat",
    "village" : "Kalol"
},
{
    "_id" : ObjectId("58db5a628f7b5013ad477574"),
    "district" : "Ahmadabad",
    "state" : "Gujarat",
    "village" : "Barwala"
}
我想按州、区和村对其进行分组,以使我能够以以下格式显示结果

[
  {
    "state": "Gujarat",
    "districts": [
      {
        "district": "Gandhinagar",
        "villages": [
          {
            "village": "Mansa"
          },
          {
            "village": "Kalol"
          }
        ]
      },
      {
        "district": "Ahmadabad",
        "villages": [
          {
            "village": "Barwala"
          }
        ]
      }
    ]
  },
  {
    "state": "Assam",
    "districts": [
      {
        "district": "Sonitpur",
        "villages": [
          {
            "village": "Helem"
          }
        ]
      },
      {
        "district": "Lakhimpur",
        "villages": [
          {
            "village": "Kadam"
          }
        ]
      },
      {
        "district": "Dibrugarh",
        "villages": [
          {
            "village": "Dibrugarh"
          }
        ]
      }
    ]
  },
  {
    "state": "Andhra Pradesh",
    "districts": [
      {
        "district": "Chittor",
        "villages": [
          {
            "village": "Chittor"
          }
        ]
      }
    ]
  }
]
我尝试过,但没有找到一种方法来获得这样的聚合

1) db.historical_prices.aggregate({$group: {_id: {"state": "$state"}}}, {$group: {_id: {"commodity": "$commodity"}}})

2) db.places.aggregate()
      .match(qb.where("enabled").eq(false))
      .group({ _id: {"state": "$state", "district": "$district"}, "districts": {$push: {district: "$district"}}, })
我在
elasticsearch
中计算出了这种聚合

GET /places/_search
{
  "query": { "match_all": {} },
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "group_by_district": {
          "terms": {
            "field": "district.keyword"
          },
          "aggs": {
            "group_by_village": {
              "terms": {
                "field": "village.keyword"
              }
            }
          }
        }
      }
    }
  }
}

如何在
MongoDB
中获取此信息?因为我不想仅仅为了做这件事而使用elasticsearch。

你可以在下面尝试。下面的查询是
上的
$group
地区
累积
村庄
,然后是
上的
$group
累积
地区
和以前收集的
村庄

db.collection.aggregate([{
    $group: {
        _id: {state:"$state", district:"$district"},
        "villages":{$addToSet:{village:"$village"}}
    }
},{
    $group: {
        _id: {state:"$_id.state"},
        "districts":{$push:{villages:"$villages", district:"$_id.district"}}
    }
}])

通过尝试更新了它。