在MongoDB中,我有一個文檔,其字段名爲"ClockInTime"
,它是從CSV導入的字符串。如何將文本中的MongoDB屬性轉換爲日期類型?
合適的db.ClockTime.update()
語句看起來像將這些基於文本的值轉換爲日期數據類型是什麼樣的?
在MongoDB中,我有一個文檔,其字段名爲"ClockInTime"
,它是從CSV導入的字符串。如何將文本中的MongoDB屬性轉換爲日期類型?
合適的db.ClockTime.update()
語句看起來像將這些基於文本的值轉換爲日期數據類型是什麼樣的?
此代碼應該這樣做:
> var cursor = db.ClockTime.find()
> while (cursor.hasNext()) {
... var doc = cursor.next();
... db.ClockTime.update({_id : doc._id}, {$set : {ClockInTime : new Date(doc.ClockInTime)}})
... }
這工作... thx ... – 2010-05-24 22:47:18
@Kristina - Phew,這節省了大量的時間,感謝作者提出這樣的要求題。 – 2011-10-22 13:35:28
就像一個旁註(我要糾正),但如果你從一個時間戳值轉換,一個字符串將無法正常工作。它必須是一個長整數。例如,源文件(CSV或JSON)中的時間戳值206281199529不能爲'206281199529'。我不確定爲什麼不這樣做 - 用v2.2.2試用它,並且每次將日期設置爲紀元。 – backdesk 2012-12-16 16:56:22
我有完全一樣的情況傑夫·弗裏茨。
在我的情況我有以下簡單的解決方案取得成功:
db.ClockTime.find().forEach(function(doc) {
doc.ClockInTime=new Date(doc.ClockInTime);
db.ClockTime.save(doc);
})
如果需要檢查,如果已經被轉換的場,你可以用這個條件:
/usr/bin/mongo mydb --eval 'db.mycollection.find().forEach(function(doc){
if (doc.date instanceof Date !== true) {
doc.date = new ISODate(doc.date);
db.mycollection.save(doc);
}
});'
否則命令行可能會中斷。
這是使用Python pymongo
from pymongo import MongoClient
from datetime import datetime
def fixTime(host, port, database, collection, attr, date_format):
#host is where the mongodb is hosted eg: "localhost"
#port is the mongodb port eg: 27017
#database is the name of database eg : "test"
#collection is the name of collection eg : "test_collection"
#attr is the column name which needs to be modified
#date_format is the format of the string eg : "%Y-%m-%d %H:%M:%S.%f"
#http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
client = MongoClient(host, port)
db = client[database]
col = db[collection]
for obj in col.find():
if obj[attr]:
if type(obj[attr]) is not datetime:
time = datetime.strptime(obj[attr],date_format)
col.update({'_id':obj['_id']},{'$set':{attr : time}})
更多信息的通用示例代碼:http://salilpa.com/home/content/how-convert-property-mongodb-text-date-type-using-pymongo
我想執行的蒙戈外殼這一說法作爲就地更新。 – 2010-05-24 22:07:55
會很高興看到一些示例數據,即「ClockTime」:「-233744483733」 – backdesk 2012-12-16 16:12:35