gpt4 book ai didi

mongodb - 如何确定平均值是 0 还是 null?

转载 作者:可可西里 更新时间:2023-11-01 09:31:40 26 4
gpt4 key购买 nike

我有一个 Mongo 数据库,我在其中运行一些聚合查询。这是我要运行的简化查询:

db.coll.aggregate([
{ $group: {
_id: 'fieldA',
fieldB: { $avg: '$fieldB' }
} },
])

它按 fieldA 对数据进行分组并计算 fieldB 的平均值。无论如何,结果集中的某些行将 0 作为 fieldB 的值。可能有两个原因:

  1. 平均值为 0。
  2. 组中的所有文档都没有 fieldB(或者值为 null);在这种情况下,Mongo 的行为是返回 0。

是否可以在不发出其他查询且不离开聚合管道的情况下确定结果选择中每一行发生的情况?

更新

我无法过滤掉非空字段,因为我正在对几个字段进行聚合,例如:

db.coll.aggregate([
{ $group: {
_id: 'fieldA',
fieldB: { $avg: '$fieldB' },
fieldC: { $avg: '$fieldC' }
} },
])

有些文档可能有 fieldB 但没有 fieldC,反之亦然。

最佳答案

您可以在$group 操作之前使用$match 过滤数据。

db.coll.aggregate([
{ $match: { fieldB : {$ne : null }}}},
{ $group: {
_id: 'fieldA',
fieldB: { $avg: '$fieldB' }
} },
])

这样您将只获得设置了 fieldB 的文档。

更新

你不能那样使用 $avg 但你可以使用 $min 找出是否所有值都是 NULL运算符(operator):

db.coll.aggregate([
{ $group: {
_id: 'fieldA',
fieldB: { $avg: '$fieldB' } ,
fieldBAllNullOrMin: { $min: '$fieldB' }
} },
])

如果 所有 值为null,则$min 运算符将返回null,否则将返回min。值(但仅在 2.4+ 版本的 MongoDB 中)。

关于mongodb - 如何确定平均值是 0 还是 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com