{
"_id" : 1.0,
"item" : "abc",
"date" : ISODate("2014-01-21T08:15:39.736Z")
}
{
"_id" : 2.0,
"item" : "def",
"date" : ISODate("2015-01-14T08:15:39.736Z")
}
{
"_id" : 3.0,
"item" : "absc",
"date" : ISODate("2017-06-17T08:15:39.736Z")
}
.........
.........
我在数据库中存在数百万条数据,并且我需要将所有现有数据“date”字段值从ISO日期更新为正常字符串,如“2017 -01-21“(YYYY-MM-DD)。可以通过在MongoDB中使用查询或函数来实现吗?
答案 0 :(得分:0)
您可以使用$dateToString
运算符:
db.test.aggregate([ {$project: { item: 1, date: { $dateToString: { format: "%Y-%m-%d", date: "$date"}}}}])
这将产生:
{ "_id" : 1, "item" : "abc", "date" : "2014-01-21" }
{ "_id" : 2, "item" : "def", "date" : "2015-01-14" }
{ "_id" : 3, "item" : "absc", "date" : "2017-06-17" }
更多阅读可在此处找到 - https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/
答案 1 :(得分:0)
这将更新所有集合。确保你有备份。
db.collection.aggregate([
{ "$addFields": { "date": {$dateToString: { format: "%Y-%m-%d", date: "$date" }} }},
{ "$out": "collection" }
])
答案 2 :(得分:-1)
试试此代码
db.collectionName.find().forEach(function (doc) {
var month = ("0" + (doc.date.getMonth() + 1)).slice(-2)
var day = ("0" + doc.date.getDate()).slice(-2)
var year = doc.date.getFullYear()
db.iso.update({_id: doc._id}, {$set:{date: year + "-" + month + "-" + day}})
});