我有一个基本的查找查询,该查询从数据库中获取所有用户“组”。例如:db.groups.find({})
。结果如下:
[{
name: 'Finance',
desc: 'The finance team',
color: '#FF0000'
},
{
name: 'Sales',
desc: 'The sales team',
color: '#008000'
}]
现在,我还有一个用户集合,该集合可以为每个用户引用一个或多个这些组。例如:
db.users.find({})
[{
firstname: 'Joe',
lastname: 'Smith'
groups: ['Finance'],
},
{
firstname: 'Jane',
lastname: 'Smith',
groups: ['Finance', 'Sales']
}]
本质上,我正在尝试建立一个返回以下结果的查询:
[{
name: 'Finance',
desc: 'The finance team',
color: '#FF0000',
user_count: 2
},
{
name: 'Sales',
desc: 'The sales team',
color: '#008000',
user_count: 1
}]
我不确定该如何处理,我在考虑集合体或投影中的某些东西吗?
db.groups.find({}, {name: 1, desc: 1, color: 1, user_count: ???})
答案 0 :(得分:1)
您可以使用以下汇总
db.groups.aggregate([
{ "$lookup": {
"from": "users",
"let": { "name": "$name" },
"pipeline": [{ "$match": { "$expr": { "$in": ["$$name", "$groups"] } } }],
"as": "users"
}},
{ "$project": {
"name": 1,
"desc": 1,
"color": 1,
"user_count": { "$size": "$users" }
}}
])