MongoDB - 没有平均字段没有值

时间:2014-10-21 04:12:39

标签: mongodb mongoengine

我有像这样的MongoDB文件:

reports: {
    "2014-10-20": {
      aA: 577.5,
      aB: 537,
      aC: 521,
}

在某些情况下,其中一个字典项的值是未知的。

换句话说,文档可能如下所示:

reports: {
    "2014-10-20": {
      aA: 577.5,
      aB: 537,
      aC: None,
}

当我对aC等字段求平均值时(在上面的第二个示例中),如何确保不计算没有值(None或类似值)的字段?

我应该将它们设置为None,将它们留空等等吗?

1 个答案:

答案 0 :(得分:1)

我不确定您是在讨论mongoengine中某些应用程序代码的上下文中的数学,还是只是使用MongoDB Aggregation Pipeline

但是,在这两种情况下,您必须将empty / unknown / unset属性设置为0才能计算平均值,

如果您使用聚合管道,则可以使用 $ifNull 运算符,如果属性为

{
  ...
  aC : null
  ...
}

聚合看起来像

db.test.aggregate([
 { $project: {  "aC" : { $ifNull: [ "$aC", 0 ] }  } },
 {  $group : { _id : "key" ,   "avg" :  {$avg : "$aC"}  }   }
]);