如何使用MongoDB更改聚合中的空值

时间:2015-03-31 16:44:29

标签: mongodb

我很难让这段代码正常运行。我在mongo db中有一个聚合查询,我在其中执行一些操作。没有$ ifNull运算符的查询工作正常,但我得到一些我不想打印的空值。我已经阅读了$ ifNull运算符的文档,但是我无法使这段代码正常工作。到目前为止我有这个代码,女巫给了我这个错误:

SyntaxError: Unexpected token :

我认为这是来自ifnull的“:”,但我不知道为什么。我正在关注官方网站文档中的sintax。我还尝试使用另一个项目字段来过滤Null值,但它没有用。 到目前为止这是de query:

 db.cleandrivers.aggregate(
 [
 {
    $project :
      { _id:"$_id", 
        week : {$week : "$recruiter.date"},
        dif: {   
                $ifNull: [$divide : [{$subtract : ["$personal.stat.first_inspected","$recruiter.date"]}  , 1000 * 60 * 60 ], "0"]
             }
      }
 }, { $match : { week: 11  }  } 
 ])

编辑:一切正常,这是一个实际上正在计算招聘人员给出特定周的查询。

  db.cleandrivers.aggregate(
    ...  [
    ...  {
    ...  $project :
    ...    { _id:"$_id", 
    ...      week : {$week : "$personal.stat.recruited"}
    ...    }
    ...  },
    ...  { $match : { $and: [ {week: 10}]  }  }, 
    ... {$group: { _id: "Sum",sum: {$sum : 1}}} ])

输出:

   { "_id" : "Sum", "sum" : 199 }

这是我的文件sintax:

 "personal" : {
                    "stat" : {
                            "recruited" : ISODate("2015-02-02T14:30:32.089Z"),
                            "first_inspected" : ISODate("2015-02-02T14:33:15.956Z"),
                            "targo" : ISODate("2015-02-06T17:51:00.672Z")
                    }

问题是,当我使用我在尝试计算招募的ppl时使用的相同查询时,它给我一个错误,因为有些文档没有该字段。我真的很困惑我如何过滤所有文档中包含first_inspected字段的文档,并将它们计算为一周。 错误发生在$ week行上,试图将空日期转换为一周,这给了我一个错误。

1 个答案:

答案 0 :(得分:6)

我重新格式化并修补了语法错误:

db.cleandrivers.aggregate([
    { "$project" : {
        "_id" : "$_id", 
        "week" : { "$week" : "$recruiter.date" },
        "dif" : {   
            "$ifNull" : [{ "$divide" : [{ "$subtract" : ["$personal.stat.first_inspected", "$recruiter.date"] }, 1000 * 60 * 60 ] }, "0"]
        }
    } },
    { "$match" : { "week" : 11 } } 
])

问题是你在对象里面没有$divide表达式,所以它就像

[ "$divide" : stuff, more, stuff]

而不是

[{ "$divide" : stuff }, more, stuff]

我无法帮助您获得聚合以返回您想要的内容,因为我不知道您正在寻找什么。如果您需要更多帮助,是否可以编辑问题以包含示例文档以及您希望从中获取结果的说明?