【发布时间】:2020-07-19 13:37:55
【问题描述】:
我有一个以这种格式存储成绩单的集合:
{
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: {
_id: '$convId',
started: { $min: '$timestamp' },
ended: { $max: '$timestamp' },
channel: { $first: '$source.channel' },
}
我知道这是因为 $first 的问题,所以我尝试使用 $min 和 $max(以及其他聚合运算符),因为它们应该忽略空值,但它不会因为未知原因(至少 1文档的 source.channel 字段填充不为空)。
谁能建议我如何排除 null 并返回带有值的字段?
编辑:我需要所有文档的时间戳,因此我无法在 $match 中对其进行优化。
【问题讨论】:
标签: mongodb mongodb-query nosql aggregation-framework