我在我的MongoDB数据库中有这种格式的日期。将日期转换为MongoDB ISO日期
{
"_id": ObjectId("5682e899f326d45c821d8b9b"),
"City": "Atlanta",
"Date": "12/5/02",
"Temp": 78.5,
}
我想将其转换为ISO日期,以便我可以在我的数据库中对日期进行排序。使用PyMongo或JavaScript进行更新命令的最佳方式是什么?
我在我的MongoDB数据库中有这种格式的日期。将日期转换为MongoDB ISO日期
{
"_id": ObjectId("5682e899f326d45c821d8b9b"),
"City": "Atlanta",
"Date": "12/5/02",
"Temp": 78.5,
}
我想将其转换为ISO日期,以便我可以在我的数据库中对日期进行排序。使用PyMongo或JavaScript进行更新命令的最佳方式是什么?
我想,你应该首先检索记录并使用循环来改变所有。然后你应该解析数据来构造一个Date
对象来转换为mongo日期。
var value = "12/5/02";
var parts = value.split("/");
var dt = new Date("20"+parts[2], parseInt(parts[1])-1, parts[0]);
如果您正在使用的NodeJS,检查this了。
编辑:我假设12 =日,5 =月。
自从我上次使用Mongo后,Mongo已经发生了很大的变化,但据我所知,正如其他地方所建议的那样,您将不得不依次加载和更新每条记录。
你有两个问题。首先是你的日期格式不明确。您给出的示例日期将具有不同的值,具体取决于用于将其解析为日期的系统的区域设置。在美国,它是(我认为)12月5日在2002年。在大西洋的一边,虽然它将解析为2002年5月12日。娱乐时间。
假设你知道每个日期的intented格式,那么在节点可以使用moment.js使用于每个日期解析到一个固定的格式例如
let date = moment(document.Date, "D/M/YY");
,然后作为一个ISO日期输出
document.Date = date.toISOString();
,或者如果你是人为善,做非破坏性
document.ISODate = date.toISOString();
虽然现在你有两个日期后看...
您需要遍历整个结果集,并逐一更新文件,像这样:如果你想删除
var f = function(e) {
var arr = e['Date'].split("/");
//assuming "Date" field was formatted as "YY/MM/DD"
var date_obj = new Date(arr[0], arr[1], arr[2]);
db.your_collection.update({_id: e['_id']}, {$set: {date_obj: date_obj}});
}
db.your_collection.find().forEach(f)
您的旧字段,您可以运行以下内容:
db.your_collection.update({}, {$unset: {Date: 1}}, {multi:true});
但是,直到您确定您的日期转换正确后才这样做。
使用批量操作可以使这种效率更高。 –
@MarkusWMahlberg - 如果每个文档的更新'date_obj'值不同,Bulk操作将如何工作? –
我的头顶2.6:'var bulk = db.c.initializeUnorderedBulkOp(); var f = function(e){... var d = ...; bulk.find(查询).update(upDoc);}; db.c.find(查询).forEach(F); bulk.execute()'。相应地为3.0 –
是否想通过将Date更改为ISODate来更新文档? – styvane
您需要阅读文档,添加日期对象,然后再保存它们 – Valijon