2015-04-19 4 views
1

Je ne suis donc pas sûr de savoir comment convertir un objet ObjectId et datetime en chaînes en utilisant la classe bson.json_util. Je comprends que vous pouvez utiliser le dumps puis loads à partir de pymongo cursor, mais le problème survient après que je charge, j'ai toujours le "_id" comme ObjectId et datetime comme un objet datetime.MongoDB - Comment afficher ObjectId et datetime en tant que chaîne (en utilisant bson.json_util)

mon code:

all_cats = db.cats.find() 
foo = dumps(all_cats) 
print loads(foo) 


[{ 
    u'c': u'this is a comment', 
    u'd': datetime.datetime(2015, 4, 19, 7, 16, tzinfo=<bson.tz_util.FixedOffset object at 0x10cece7d0>), 
    u'_id': ObjectId('55329b7de73f02d1069528f5') 
}] 

Alors, comment puis-je convertir le _id à "_id": "55329b7de73f02d1069528f5" et la date "d": "19/04/2015 07:16:00" ??

Merci beaucoup!

EDIT

Après lorsque tous les éléments sont convertis en chaîne, je vais revenir avec jsonify de Flask - qui ne se plaignent que « _id » est un ObjectId et « d » est un objet datetime

return jsonify(loads(foo)) 
+0

str (all_cats [0] [ '_ d']) vous donnera la _id sous forme de chaîne d contient un objet date de python, vous pouvez formater comme vous le souhaitez – nickmilon

+0

ce qui arrive quand vous faites 'foo [0] [" _ id "]'? – Heisenberg

+0

@nickmilon - oui merci, je pensais faire cela, mais je n'aime pas le fait que si j'ai des millions de lignes je vais devoir faire une boucle sur tous les éléments et passer chaque élément de objectid en chaîne et datetime en chaîne – jonprasetyo

Répondre

1

Ces objets de valeur sont standar de Pymongo.

Vous pouvez transformer en Python en utilisant ces méthodes:

L'utilisation _ID str (objet) est une cause bson.objectid.ObjectId (il est une fonction pas une méthode)

L'utilisation D D. strftime ("% Y-% m-% d% H:% M:% S") parce que c'est un datetime, vous pouvez changer le format comme vous le souhaitez.

Exemple:

from pymongo import MongoClient 
# making a Connection with MongoClient 
client = MongoClient() 
#client = MongoClient('localhost', 27017) 
# getting a Database 
db = client.local 
# getting a Collection 
test = db['foo2'] 
#print test 
item = test.find_one() 
print 'Hello %s!' % item 
#example Date 
d = item['birth'] 
dString = d.strftime("%Y-%m-%d %H:%M:%S") 
print 'D: %s' % d 
print 'Type D: %s' % type(d) 
print 'DString: %s' % dString 
print 'Type DString: %s' % type(dString) 
#example _ID 
id = item['_id'] 
idString = str(id) 
print 'ID: %s' % id 
print 'Type ID: %s' % type(id) 
print 'IDString: %s' % idString 
print 'Type IDString: %s' % type(idString)