在MongoDB shell FIND脚本中格式化日期值

时间:2016-08-03 16:01:13

标签: mongodb shell mongodb-query

这是我的 Mongo Shell脚本

db.MyCollection.find({ "ProjectID" : 999 } }, { 
    "_id" : 0, 
    "DueDate" : 1
     }).sort({ "CreatedDate" : -1 })

结果

{
   "DueDate" : ISODate("2016-02-20T08:00:00.000Z")
}

预期结果:

{ 
 "DueDate" : "2016-02-20 08:00 AM"
}

尝试遵循此article

db.MyCollection.aggregate(
   [
     {
       $project: {
          yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$DueDate" } },
          time: { $dateToString: { format: "%H:%M:%S:%L", date: "$DueDate" } }
       }
     }
   ]
)

提供以下 null 结果

{
    "_id" : ObjectId("578e3bb48c305af06d30147e"),
    "yearMonthDay" : null,
    "time" : null
}

我如何才能完成这项工作,我还想在投影中添加其他字段而不包含任何格式

1 个答案:

答案 0 :(得分:0)

您运行的汇总管道具有错误的 $dateToString 格式。您需要运行此管道才能获得正确的结果:

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

恰好是mongo shell查询的日期格式化版本:

db.MyCollection.find(
    { "ProjectID" : 999 } 
    { "_id" : 0, "DueDate" : 1 }
}).sort({ "CreatedDate" : -1 })