mongodb: сгруппировать и считать, если поле не равно нулю, иначе показывает ноль - PullRequest
0 голосов
/ 17 марта 2020

У меня есть тысячи документов в mongodb, которые я должен сгруппировать по groupId и подсчитать их, если groupId существует и не равен нулю. Если это поле имеет нулевое значение, результат должен показывать 0 в счетчике. Вот примеры документов

{
  "_id": ObjectId("5e706eb075658f3af3a61694"),
  "name": "child doc 1",
  "email": "abcd@yopmail.com",
  "groupId": ObjectId("5e70708775658f3af3a61695"),
  "createdAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "updatedAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "__v": 0
},
{
  "_id": ObjectId("5e706eb075658f3af3a61694"),
  "name": "child doc 2",
  "email": "abcd@yopmail.com",
  "groupId": ObjectId("5e70708775658f3af3a61695"),
  "createdAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "updatedAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "__v": 0
},
{
  "_id": ObjectId("5e706eb075658f3af3a61694"),
  "name": "child doc 3",
  "email": "abcd@yopmail.com",
  "groupId": ObjectId("5e70708775658f3af3a61695"),
  "createdAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "updatedAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "__v": 0,
},
{
  "_id": ObjectId("5e70708775658f3af3a61695"),
  "name": "parent doc",
  "email": "abcd@yopmail.com",
  "groupId": null,
  "createdAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "updatedAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "__v": 0
}

Для тех документов, у которых groupId не равен нулю, т.е. дочерних документов, количество должно быть 0. Кроме того, результат НЕ должен содержать те документы, у которых groupId НЕ равен NULL. , Результат должен быть примерно таким,

{
  "_id": ObjectId("5e70708775658f3af3a61695"),
  "name": "parent doc",
  "email": "abcd@yopmail.com",
  "groupId": null,
  "createdAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "updatedAt": ISODate("2020-03-17T12:01:12.525+05:30"),
  "count": 3,
  "__v": 0
}

Как я могу это сделать?

1 Ответ

0 голосов
/ 17 марта 2020

Можно установить значение по умолчанию для groupId, когда оно равно нулю, это значение по умолчанию не должно быть таким же, как и у других элементов, имеющих нулевой идентификатор группы. Вы можете сделать это, используя $ ifNull https://docs.mongodb.com/manual/reference/operator/aggregation/ifNull/

и установить в groupId что-то вроде id документа. После этого вы можете группировать элементы. Тогда вы можете установить ноль в счетчике, если groupId совпадает с id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...