在MongoDB中将字符串日期更改为ISO日期?

时间:2017-01-23 07:03:43

标签: mongodb date isodate

在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上也有一个解决方案,但是在我的文档中添加新字段我认为是因为数组,我想更新现有的字段。

2 个答案:

答案 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]