【问题标题】:Format date value in MongoDB shell FIND script在 MongoDB shell FIND 脚本中格式化日期值
【发布时间】:2016-08-03 16:01:12
【问题描述】:

这是我的 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
}

我怎样才能完成这项工作,我还想将其他字段添加到投影中,而不需要任何格式

【问题讨论】:

  • 很奇怪,我已经尝试过您的聚合查询,它为您提供的文档返回{ "_id" : ..., "yearMonthDay" : "2016-02-20", "time" : "08:00:00:000" }null 值不存在于结果中。

标签: mongodb shell mongodb-query


【解决方案1】:

您正在运行的聚合管道的 $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 })

【讨论】:

  • 如何将其转换为当地时间 ISO 日期 ISODate("2016-10-08T17:00:00.000Z") 返回为“2016-10-08 17-00”,实际上是星期六, 2016年10月8日 22:30:00
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多