计算MongoDB中的唯一值

计算MongoDB中的唯一值,mongodb,sum,aggregation-framework,Mongodb,Sum,Aggregation Framework,在我的mongoDB管道的$facet阶段,由于一些记录引用相同的“customer.id”,我需要根据“customer.id”的唯一出现次数进行计数。我试过这个: "totalCustomers" : [ { $group : { "$customer.id" : { $sum: 1 } } } ] "totalCustomers" : [ { "$group" : { "_id" : "$customer.id", "count" : { "$sum" : 1 }}} ] 。。。

在我的mongoDB管道的
$facet
阶段,由于一些记录引用相同的“customer.id”,我需要根据“customer.id”的唯一出现次数进行计数。我试过这个:

"totalCustomers" : [ { $group : { "$customer.id" : { $sum: 1 } } } ]
"totalCustomers" : [  { "$group" : { "_id" : "$customer.id", "count" : { "$sum" : 1 }}}   ]
。。。但最终会出现错误:“字段名“$customer”不能是操作员名”

我也试过:

"totalCustomers" : [ { $group : { "$customer.id" : { $sum: 1 } } } ]
"totalCustomers" : [  { "$group" : { "_id" : "$customer.id", "count" : { "$sum" : 1 }}}   ]
。。。这不会出错,但这给了我所有的记录,而不是所有记录的数字计数

对我的数据集中每个唯一的“$customer.id”进行计数的语法是什么?我的理解是,我需要在
$group
$project
阶段中使用
$sum
,但我不清楚这应该是什么样子

为了进一步澄清,如果我的数据结构如下所示:

[
  {
  id: '111',
  someProp: <value>,
  customer: { id: '222' } 
  },
  {
  id: '112',
  someProp: <value>,
  customer: { id: '222' } 
  }
]
[
{
id:'111',
someProp:,
客户:{id:'222'}
},
{
id:'112',
someProp:,
客户:{id:'222'}
}
]

。。。我应该以“totalCustomers:1”结尾。

您可以通过两个步骤完成:

[
    {$group: {_id: null, customerIds: {$addToSet: '$customer.id'}}},
    {$project: {uniqueCustomers: {$size: '$customerIds'}}}
]

这将创建一个包含所有
customer.id
s的集合(技术上是一个没有重复项的数组),并获取其大小。

谢谢,但这似乎返回了所有记录,而不是总数的计数。第二个片段是一个有效的查询。如果没有得到预期的结果,可能是因为数据结构。给出一些你想要分组的例子。完美。这正是我所需要的。在这种情况下使用$addToSet是有意义的。非常感谢,@Radoslow。