MongoDB shell脚本使用投影格式化日期并获取当地时间

时间:2016-08-11 07:51:44

标签: javascript mongodb shell

以下是我正在使用的投影

db.MyCollection.aggregate([
    { "$match": { "ProjectID" : 999 } },
    { "$sort": { "CreatedDate": -1 } },
    {
        "$project": {
            "_id": 0,
            "DueDate": {
                "$dateToString": { 
                    "format": "%Y-%m-%d %H-%M", 
                    "date": "$DueDate"
                }
            }
        }
    }
])

我在Mongo中的截止日期值为ISODate("2016-10-08T17:00:00.000Z"),当地时间为22:30 PM但是使用上面的预测我得到的值是下午5:00

ISODate("2016-10-08T17:00:00.000Z").toLocaleString()会返回Saturday, October 08, 2016 22:30:00

那么如何在投影中应用toLocaleString()并以上述格式获得结果

1 个答案:

答案 0 :(得分:0)

您无法直接使用“toLocaleString()”。但是,您可以添加偏移量。

1)第三个管道用于添加偏移量

2)第四个管道用于格式化日期

var tzOffset = 5.5 * 1000 * 60 * 60;

db.MyCollection.aggregate( [
   { "$match": { "ProjectID" : 999 } },
   { "$sort": { "CreatedDate": -1 } },
   {          
      $project: {
         localTime: {
            $let: {
               vars: {
                   "localTime": { "$add": [ "$DueDate", tzOffset]

                }
               },
               in: { $add: ["$$localTime"] }
            }
         }
      }
   },
   {          
      $project: {
         "_id": 0, 
         "formattedLocalTime": {
                "$dateToString": { 
                    "format": "%Y-%m-%d %H-%M", 
                    "date": "$localTime"
                }
            }
      }
   }

]);

<强>输入: -

"DueDate" : ISODate("2016-08-11T10:17:09.203Z")
"DueDate" : ISODate("2016-08-11T23:16:09.203Z")

<强>输出: -

"formattedLocalTime" : "2016-08-11 15-47"
"formattedLocalTime" : "2016-08-12 04-46"

请注意输出2.下一个日期已正确填充。