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

Giu*_*ppe 0 mongodb

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

SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud)

我认为这是来自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  }  } 
 ])
Run Code Online (Sandbox Code Playgroud)

编辑:一切都运行正常,这是一个实际工作计数招聘人员给出一个特定周的查询.

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

输出:

   { "_id" : "Sum", "sum" : 199 }
Run Code Online (Sandbox Code Playgroud)

这是我的文件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")
                    }
Run Code Online (Sandbox Code Playgroud)

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

wdb*_*ley 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 } } 
])
Run Code Online (Sandbox Code Playgroud)

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

[ "$divide" : stuff, more, stuff]
Run Code Online (Sandbox Code Playgroud)

代替

[{ "$divide" : stuff }, more, stuff]
Run Code Online (Sandbox Code Playgroud)

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