将string更新为mongodb中的Date对象

我正在研究mongodb和node.js,并且发现了一个场景。

我大量插入大约2亿条logging的数据。 在那些有一些字段保存为string,但实际上是date。

有什么办法可以让我做点什么吗?

db.collection.update({}, {$set: {dateField: new Date(dateField)}}, { multi: true }) 

其中date是YYYY-MM-DD格式

MongoDB中目前没有允许您在更新操作中访问另一个字段的内容的function。 你可以用任何语言来做的唯一事情是迭代结果:

 db.collection.find({}).forEach(function(doc) { db.collection.update( { "_id": doc._id }, {"$set": { "dateField": new Date(doc.dateField) }} ); }); 

现在,您可以使用db.eval()在服务器上运行它, 但要注意 ,由于文档中存在很多危险,并且可能会对生产系统产生巨大影响。

如果你的其他select是基于让你的更新尽可能靠近(以networking的方式)运行到数据库的话。

同样在你最后的作品中,你确实看到你的date并不全是你在这里提到的格式,有些条目在一个月或一天只有一个数字。 所以如果你还没有的话,你也必须要处理这个问题。