【问题标题】:How can I change null values in aggregation using MongoDB如何使用 MongoDB 更改聚合中的空值
【发布时间】:2018-07-06 14:16:32
【问题描述】:

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

SyntaxError: Unexpected token :

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

 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 行,女巫试图将空日期转换为一周,它给了我一个错误。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

    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]
    

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

    【讨论】:

    • 我编辑了我的问题,添加了我实际错误的一些细节。我遇到了一些在日期字段上具有空值的文档的问题,我无法汇总它们。 (我试图排除并仅计算特定字段中存在的那些)
    • 我错误地编辑了你的答案,你能删除我的编辑让其他人看到你的答案吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多