我有一个看起来像这样的mongo DB - >
集合名称:用户
{ username:'something'
_id : ObjectId(someID1)
acl : { users : [ObjectId(someID1),ObjectId(someID2),ObjectId(someID3)] , group : [grpID4,grpID5,grpID6] }
.
.
.
}
我希望有一个聚合查询,它查找db.users.acl.users的所有文档,并查找每个唯一objectID的计数。
这就像添加所有users.acl.users数组,然后在python字典中返回每个唯一ID的计数
{
"result" : [
{
"_id" : ObjectId("someID1"),
"count" : 20
},
{
"_id" : ObjectId("someID2"),
"count" : 2
},
{
"_id" : ObjectID("someID3")
"count" : 1
},
],
"ok" : 1
}
我尝试过pythonic方式,首先添加所有数组,然后查找计数,但我希望通过查询更多地通过python进行更多。我非常无知如何查询这样的数组。
任何想法从哪里开始?
答案 0 :(得分:3)
通常在聚合框架中使用MongoDB中的数组时,您希望使用$unwind
管道运算符将内容“反规范化”为单独的文档。允许您在其他管道阶段使用它们:
db.users.aggregate([
{ "$unwind": "$acl.users" },
{ "$group": {
"_id": "$acl.users",
"count": { "$sum": 1 }
}}
])
Python语法通常与JavaScript的shell语法基本相同,因此通常应用SQL to Aggregation mapping等直接示例。