Подсчет уникальных значений в MongoDB - PullRequest
0 голосов
/ 26 июня 2018

На этапе $facet моего конвейера mongoDB, поскольку некоторые записи ссылаются на один и тот же "customer.id", мне нужно рассчитывать на основе уникальных вхождений "customer.id". Я пробовал это:

"totalCustomers" : [ { $group : { "$customer.id" : { $sum: 1 } } } ]

... но в итоге появляется ошибка: «Имя поля« $ customer »не может быть именем оператора».

Я тоже пробовал это:

"totalCustomers" : [  { "$group" : { "_id" : "$customer.id", "count" : { "$sum" : 1 }}}   ]

... который не выдает ошибку, но дает мне все записи, а не числовой счет всех этих записей.

Каков синтаксис для подсчета каждого уникального «$ customer.id» из моего набора данных? Насколько я понимаю, мне нужно использовать $sum на стадии $group или $project, но неясно, как конкретно это должно выглядеть.

Чтобы уточнить, если моя структура данных выглядит следующим образом:

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

... Я должен получить "totalCustomers: 1".

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете сделать это в два этапа:

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

Это создаст набор (технически массив без дубликатов) со всеми customer.id с и получит его размер.

...