2017-01-23 124 views
1

在MongoDB中,我有一个名为“date”的字段的文档,该字段在数组中。在MongoDB中将字符串日期更改为ISO日期?

{ 
"_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(); 
} 
}) 

its throws Error: "message" : "invalid ISO date"

我想转换该字符串日期为ISO date.I有一些代码更改,但是其增加新的日期与ISO格式,但我想更新哪些已经可用,不需要插入新的。 我也在stackoverflow上得到了一个解决方案,但那是在我的文档中添加新字段,我认为这是因为数组,我想更新现有的一个。

回答

0

您可以使用dateutil模块(须藤PIP安装python-dateutil)

以下是其转换ISO串入DATATIME对象,然后将其插入到数据库蒙哥示例代码。

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" 
} 

您可以更新以类似的方式串日期以ISO格式在MongoDB中。

+0

没有使用pymongo我该怎么办? –

+0

你必须直接在MongoDB中进行更新,对吧?然后你需要一些接口将你的编程语言连接到mongodb。在Python中,这恰好是'pymongo'(有其他人,但相信我,pymongo比其他人更容易学习)。 – x899

+0

我用这个脚本;但这是在文档中创建新的字段也超出了数组...它不更新... db.dummy.find()。forEach(function(doc){ doc.mongodbdate = new Date(data.mongodbdate) ; db.dummy.save(doc); }) –

0

你只需要修改你的代码来遍历数组。

db.dummy.find().forEach(function (doc) { 
    doc.data.forEach(function (currentValue, index) { 
    doc.data[index].mongodbdate = ISODate(currentValue.mongodbdate); 
    }); 
    db.dummy.save(doc); 
}) 
相关问题