【问题标题】:Projecting a field that doesn't always existMongoDB - 投影一个并不总是存在的字段
【发布时间】:2015-06-06 12:58:54
【问题描述】:

有没有办法投影可能存在或不存在的字段?例如将其定义为 null 或 undefined?

例如,我正在查询:

      $project: {
         date: 1,
         name: "$person.name",
         age: "$person.age"
      }              

并非所有文档都保证有 $person.age,但我希望它说 {date: Today,名称:“比尔”,年龄:空}。或类似的东西。

有没有比之后迭代数据并在字段不存在时创建字段更好的方法?

【问题讨论】:

  • 有一个空值的字段和根本没有这个字段有什么区别?
  • 如果第一个文档没有稍后出现的特定字段,我正在使用的一些模块将其导出到 excel 文件或在网格中打印,将列留空。

标签: mongodb projection


【解决方案1】:

使用$ifNull

  $project: {
     date: 1,
     name: "$person.name",
     age: { $ifNull: [ "$person.age", "null" ] }
  }  

你可以找到更多关于它here

【讨论】:

  • 看起来 $ifNull 只适用于聚合,而不适用于 find
【解决方案2】:

这就是$ifNull 表达式的作用所在。来自docs$ifNull

计算一个表达式并返回表达式的值,如果 表达式计算为非空值。如果表达式计算 为空值,包括未定义值或缺失的实例 字段,返回替换表达式的值。

在您的情况下,如果年龄字段为空或不存在,以下将使用$ifNull 表达式返回非空$person.age 字段值或字符串“未指定”:

 $project: {
     date: 1,
     name: "$person.name",         
     age: { $ifNull: [ "$person.age", "Unspecified" ] }
 }    

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2018-08-26
    • 1970-01-01
    • 2015-12-19
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多