这些是我的收藏中的文件
{ "_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中)的功能?
答案 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}}}