我正在运行从一个集合到聚合集合的聚合管道。我在groupby中有一个计算如下:
'$field': { '$sum': {'$multiply': ['$field1', '$field2'] }}
在某些情况下,$ field1为null,但field2为整数,例如57.我希望这个计算返回null,但返回0。注意:当我遇到这个问题时,由于我正在使用的匹配子句,$ field1在我聚合的集合中永远不会为空。
请有人解释一下这个的原因以及我可以做些什么来确保输出空值?
编辑: 字段1和字段2可以保持实际值,例如在大多数情况下,56和67,但有时在match子句中返回的所有文档都将包含字段1的空值(从不包括字段1和字段2)
答案 0 :(得分:2)
问题是根据documentation $sum
忽略非数字值。如果所有操作数都是非数字的,则$ sum返回零。您可以使用$add
实现相同的逻辑,如下所示。我的初始答案假设$multiply
在缺少其中一个值时返回零,这在Mongo 3.2中似乎不是这样,但请告诉我这是否仍然是您的版本中的问题
db.data.aggregate([
{ $project: { summedProduct: {
$add:[ 0, { $multiply: [ "$field1", "$field2" ] } ] }
}}
])