我的所有字段都是一个数组 - 其中许多只包含一个元素,但是我无法正确地展开行为,我不明白为什么。
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}]
放松似乎没有按预期工作,但我不明白为什么,因为此代码之前已经在不同的数据集上进行过测试,看起来效果很好。
答案 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"
}])