$ unwind with group and count

时间:2015-11-16 15:48:59

标签: python mongodb

我的所有字段都是一个数组 - 其中许多只包含一个元素,但是我无法正确地展开行为,我不明白为什么。

field = ['A'] 

field = ['A', 'B']

pipeline = [ {"$unwind": "$field"}, 
            {"$group": {"_id": "$field", "count" : { "$sum" : 1 } } }, 
            {"$sort": {"_id" : 1} }, 
            ] 

然而,在我的搜索结果中,我看到的记录为[{"_id": ['A', 'B'], "count": 5}],我希望[{"_id": ['A'], "count": 5}, {"_id": ['B'], "count": 5}]

放松似乎没有按预期工作,但我不明白为什么,因为此代码之前已经在不同的数据集上进行过测试,看起来效果很好。

1 个答案:

答案 0 :(得分:1)

除非您的数据组织方式不同,否则您的示例应该有效。以下示例数据:

db.unwind.save({field:['A','B']} )

和Mongo shell命令:

db.unwind.aggregate([{
  "$unwind": "$field"
}, {
  "$group": {
    "_id": "$field",
    "count": {
      "$sum": 1
    }
  }
}, {
  "$sort": {
    "_id": 1
  }
}, ])

给出:

{ "_id" : "A", "count" : 1 }
{ "_id" : "B", "count" : 1 }

如果您的数据实际上是field:[['A','B']],则需要添加额外的$unwind参数:

db.unwind.aggregate([{
  "$unwind": "$field"
}, {
  "$group": {
    "_id": "$field",
    "count": {
      "$sum": 1
    }
  }
}, {
  "$sort": {
    "_id": 1
  }
}, {
  "$unwind": "$_id"
}])