如何将计数查询的结果插入到从查找查询返回的文档中?

时间:2019-08-09 10:36:01

标签: mongodb aggregation-framework

我有一个基本的查找查询,该查询从数据库中获取所有用户“组”。例如: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: ???})

1 个答案:

答案 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" }
  }}
])