MongoDB $ группа, где значение не равно нулю - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть коллекция, которая хранит стенограмму в этом формате:

{
 convId: abcd,
 timestamp: 2020-02-08T15:43,
 source: { channel: 'channel1' }
},
{
 convId: abcd,
 timestamp: 2020-02-08T15:42,
 source: { channel: 'channel1' }
},
{
 convId: abcd,
 timestamp: 2020-02-08T15:41,
 source: { channel: null }
},

В некоторых записях поле source.channel пусто. Когда я использую конвейер агрегации для получения уникальных диалогов для некоторых из них, я получаю source.channel как null , что является проблемой. Я использую ниже $ group stage:

$group: {
 _id: '$convId',
 started: { $min: '$timestamp' },
 ended: { $max: '$timestamp' },
 channel: { $first: '$source.channel' },
}

Я знаю, что это проблема из-за $ first, поэтому я попытался использовать $ min и $ max (вместе с другими операторами агрегирования), так как они должны игнорировать нуль значения, но это не произойдет по неизвестным причинам (по крайней мере, в 1 документе есть поле source.channel, заполненное не нулевым).

Может кто-нибудь предложить, как я могу исключить null и вернуть поле со значением?

Редактировать: мне нужны все документы для отметок времени, поэтому я не могу уточнить это в $ соответствует.

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете проверить переменную на нулевое значение, а если она не равна нулю, вы можете вернуть значение, иначе ноль.

$group: {
 _id: '$convId',
 started: { $min: '$timestamp' },
 ended: { $max: '$timestamp' },
 channel: { $cond: {
if: {
$ne: [ "$source.channel", null ]
}, then: "$source.channel", else: 'your_value'
} },
}
...