在MongoDB中,我有一个文档,其中包含一个名为“date”的字段,该字段位于数组中。
{
"_id" : ObjectId("587627a2125a730f78a20859"),
"data" : [
{
"Number" : "359983007479839",
"date" : "2016-02-10T21:56:33.000Z"
}
]
之后我运行这个脚本:
db.dummy.find().forEach(function(doc){
doc.mongodbdate = ISODate(doc.mongodbdate);
db.dummy.save(doc);
})
它给我低于输出;
{
"_id" : ObjectId("588724ba2746360c04a51e4b"),
"data" : [
{
"Number" : "359983007479839",
"mongodbdate" : "2016-02-12T18:01:06.000Z"
}
],
"mongodbdate" : ISODate("2017-01-24T15:26:24.537+05:30")
}
我也尝试了这个:
var bulk = db.dummy.initializeUnorderedBulkOp(),
count = 0;
db.dummy.find().forEach(function(doc) {
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "mongodbdate": ISODate(doc.mongodbdate) }
})
count++;
if (count % 1000 == 0) {
// Execute per 1000 operations and re-init
bulk.execute();
bulk = db.dummy.initializeUnorderedBulkOp();
}
})
它的抛出错误: “message”:“ISO日期无效”
我想将该字符串日期转换为ISO date.I已更改了一些代码,但它添加了ISO格式的新日期,但我想更新已经可用,无需插入新的。 我在stackoverflow上也有一个解决方案,但是在我的文档中添加新字段我认为是因为数组,我想更新现有的字段。
答案 0 :(得分:0)
您可以使用dateutil模块(sudo pip install python-dateutil)
以下是将ISO字符串转换为datatime对象然后将其插入mongo数据库的示例代码。
import datetime
import pymongo
import dateutil.parser
def getDatetimeFromISO(s):
d = dateutil.parser.parse(s)
return d
conn = pymongo.MongoClient()
db = conn.sampleDB
collection = db.test
post = {
"user" : "test1",
"date" : getDatetimeFromISO("2016-02-10T21:56:33.000Z")
}
collection.insert_one(post)
conn.close()
在MongoDB中
> db.test.find().pretty()
{
"_id" : ObjectId("5885b47156addb199a07bf26"),
"date" : ISODate("2016-02-10T21:56:33Z"),
"user" : "test1"
}
您可以用类似的方式将字符串日期更新为mongoDB中的ISO格式。
答案 1 :(得分:0)
您只需要修改代码以循环遍历数组。
[1]