gte - mongodb filter date between
¿Cómo convierto una propiedad en MongoDB de texto a tipo de fecha? (4)
Este código debería hacerlo:
> var cursor = db.ClockTime.find()
> while (cursor.hasNext()) {
... var doc = cursor.next();
... db.ClockTime.update({_id : doc._id}, {$set : {ClockInTime : new Date(doc.ClockInTime)}})
... }
En MongoDB, tengo un documento con un campo llamado "ClockInTime"
que se importó de CSV como una cadena.
¿Qué db.ClockTime.update()
tiene una declaración db.ClockTime.update()
apropiada para convertir estos valores basados en texto a un tipo de datos de fecha?
Este es un código de muestra genérico en python que utiliza 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}})
para más información: http://salilpa.com/home/content/how-convert-property-mongodb-text-date-type-using-pymongo
Si necesita verificar si el campo ya se ha convertido, puede usar esta condición:
/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);
}
});''
De lo contrario, la línea de comando puede romperse.
Tengo exactamente la misma situación que Jeff Fritz.
En mi caso, he tenido éxito con la siguiente solución más simple:
db.ClockTime.find().forEach(function(doc) {
doc.ClockInTime=new Date(doc.ClockInTime);
db.ClockTime.save(doc);
})