$添加一些字段作为Null返回和值为Null

时间:2016-02-07 06:57:33

标签: mongodb mongodb-query aggregation-framework

这些是我的收藏中的文件

{ "_id" : 1, "quizzes" : [ 10, 6, 7 ], "labs" : [ 5, 8 ], "final" : 80, "midterm" : 75 ,"extraMarks":10}
{ "_id" : 2, "quizzes" : [ 9, 10 ], "labs" : [ 8, 8 ], "final" : 95, "midterm" : 80 }
{ "_id" : 3, "quizzes" : [ 4, 5, 5 ], "labs" : [ 6, 5 ], "final" : 78, "midterm" : 70 }

只有文档1有一个字段额外标记:

现在我必须作为“最终”+“中期”+“额外标记”的总和进行预测

我已经编写了一个投影查询,如下所示:

db.students.aggregate([    {      $project: {          examTotal: { $add: [ "$final", "$midterm","$extraMarks" ] }      }    } ])

此查询为Document1以及Doc2和Doc3提供了正确的结果,因为该字段不存在,它的总和为null。

是否可以检查该字段是否为空并添加查询本身。有任何建议吗?

查询Mongo DB中是否有类似于nvl(在SQL中)的功能?

2 个答案:

答案 0 :(得分:6)

你可以做两个投影,第一个使用类似于nvl的$ifNull

db.students.aggregate([
  { $project: { final: 1, midterm: 1, extraMarks: { $ifNull: [ "$extraMarks", 0 ] } } }, 
  { $project: { examTotal: { $add: [ "$final", "$midterm","$extraMarks" ] } } } 
])

答案 1 :(得分:0)

使用$match阶段,将其添加到管道的开头 {$match: {"your_field":{$exists: true}}}