如何操作聚合管道中的日期字段?

时间:2017-07-01 07:00:30

标签: mongodb date aggregation-framework

我正在设置从Date字段到当天开始的时间

function getDate(date){ return new Date(date.getYear(), date.getMonth(), 
date.getDate(), 0,0,0); }
...
{"$project" : {
    "_id"   : getDate("$dt"),
...
  • 如果我发送"$dt"我收到TypeError: date.getYear is not a function因为我正在传递字符串,

  • 如果删除引号,我会Error: "$dt is not defined"

  • 但如果我将"$dt"设为"_id"的值,我会获得正确的ISO日期。

那么如何将日期对象传递给函数呢?

1 个答案:

答案 0 :(得分:0)

MongoDB的聚合管道不支持JavaScript。要在聚合管道中处理结果的日期值,您需要使用Date Aggregation Operators

例如:

db.date.aggregate([
    { $project: {
         _id: { $dateToString: { format: "%Y%m%d", date: "$dt" }}
    }}
])

假设您的文档中包含一个名为dt且日期值为ISODate("2017-07-01T10:01:23.344Z")的字段,结果将如下所示:

{
  "result": [

    {
      "_id": "20170701"
    }

  ],
  "ok": 1
}

注意:如果您在同一天有多个文档,则此方法会在结果中创建重复的_id值。如果您的目的是组合同一天的值,您可能希望投射到其他字段名称或使用$group阶段而不是$project