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