Comment convertir un pymongo.curseur.Curseur dans un dict?

j'utilise pymongo pour interroger tous les éléments d'une région (en fait, c'est pour interroger tous les lieux d'une région sur une carte). J'ai utilisé db.command(SON()) avant de chercher dans une région sphérique, qui peut me rendre un dictionnaire et dans le dictionnaire Il y a une clé appelée results qui contient les sites. Maintenant je dois chercher dans une zone carrée et je suis suggéré d'utiliser db.places.find toutefois, cela me renvoie un pymongo.cursor.Cursor la classe, et je n'ai aucune idée de comment faire pour extraire le lieu en résulte.

Ne quelqu'un sait-il si je dois convertir le curseur en dict et extraire les résultats, ou utiliser une autre méthode pour rechercher des éléments dans une région carrée? BTW, db est pymongo.la base de données.Base de données de la classe

les codes sont:

>>> import pymongo
>>> db = pymongo.MongoClient(host).PSRC 
>>> resp = db.places.find({"loc": {"$within": {"$box": [[ll_lng,ll_lat], [ur_lng,ur_lat]]}}})
>>> for doc in resp:
>>>     print(doc)

j'ai valeurs de ll_lng, ll_lat, ur_lng et ur_lat, l'utilisation de ces valeurs, mais il imprime rien de ce codes

28
demandé sur styvane 2015-03-10 19:10:55

5 réponses

find la méthode retourne un Cursor exemple, qui permet d'itérer sur tous les documents correspondants.

Pour obtenir le premier document qui correspond à des critères donnés, vous devez utiliser find_one. Le résultat de find_one est un dictionnaire.

Vous pouvez toujours utiliser le list constructeur pour retourner une liste de tous les documents de la collection mais gardez à l'esprit que cela chargera toutes les données en mémoire et peut-être pas ce que vous voulez.

vous devriez faire cela si vous avez besoin de réutiliser le curseur et avoir une bonne raison de ne pas utiliser rewind()


Démo find:

>>> import pymongo
>>> conn = pymongo.MongoClient()
>>> db = conn.test #test is my database
>>> col = db.spam #Here spam is my collection
>>> cur = col.find()  
>>> cur
<pymongo.cursor.Cursor object at 0xb6d447ec>
>>> for doc in cur:
...     print(doc)  # or do something with the document
... 
{'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
{'a': 1, 'c': 3, '_id': ObjectId('54ff32a2add8f30feb902690'), 'b': 2}

Démo find_one:

>>> col.find_one()
{'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
37
répondu styvane 2018-09-05 08:12:25

Facile

import pymongo
conn = pymongo.MongoClient()
db = conn.test #test is my database
col = db.spam #Here spam is my collection
array = list(col.find())

print array

Là vous allez

23
répondu Aminah Nuraini 2015-08-28 09:56:51

je suggère de créer une liste et d'ajouter dictionnaire.

x   = []
cur = db.dbname.find()
for i in cur:
    x.append(i)
print(x)

maintenant x est une liste de dictionnaires, vous pouvez le manipuler de la même manière que python.

3
répondu Saravanan Subramanian 2017-02-05 01:54:15

Le MongoDB find méthode ne retourne qu'un seul résultat, mais une liste de résultats sous la forme d'un Cursor. Ce dernier est un itérateur, donc vous pouvez le parcourir avec un for boucle.

pour votre cas, il suffit d'utiliser le findOne méthode au lieu de find. Ceci vous retournera un seul document en tant que dictionnaire.

1
répondu Alexandre Figura 2015-03-10 16:36:01

to_dict () Convertissez un document SON en une instance normale du dictionnaire Python.

C'est plus compliqué que juste dict(...) parce qu'il doit être récursive.

http://api.mongodb.org/python/current/api/bson/son.html

1
répondu Yegor Dia 2015-03-10 16:37:01