我很难让这段代码正常运行。我在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行上,试图将空日期转换为一周,这给了我一个错误。
答案 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]
我无法帮助您获得聚合以返回您想要的内容,因为我不知道您正在寻找什么。如果您需要更多帮助,是否可以编辑问题以包含示例文档以及您希望从中获取结果的说明?