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

svs*_*eja 1 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 }
Run Code Online (Sandbox Code Playgroud)

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

现在我必须作为"最终"+"中期"+"额外标记"的总和进行投影

我写了一个投影查询如下:

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

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

是否可以检查该字段是否为空并添加查询本身..有什么建议吗?

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

log*_*kai 6

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

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

  • 您可以将管道缩短到一个阶段:`{"$ project":{"final":1,"midterm":1,"examTotal":{"$ add":["$ final","$ midterm", {"$ ifNull":["$ extraMarks",0]}]}}}` (2认同)