计算MongoDB中的唯一值
在我的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 }}} ] 。。。
$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。