dict python mongodb dictionary mongodb-query pymongo

python - pymongo cursor to dict



¿Cómo convertir un pymongo.cursor.Cursor en un dict? (5)

El método de find devuelve una instancia de Cursor , que le permite recorrer en iteración todos los documentos coincidentes.

Para obtener el primer documento que coincida con los criterios dados, debe usar find_one . El resultado de find_one es un diccionario.

Siempre puede usar el constructor de list para devolver una lista de todos los documentos de la colección, pero tenga en cuenta que esto cargará todos los datos en la memoria y puede que no sea lo que desea.

Debe hacerlo si necesita reutilizar el cursor y tener una buena razón para no usar rewind()

Demo usando 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}

Demo usando find_one :

>>> col.find_one() {''a'': 1, ''_id'': ObjectId(''54ff30faadd8f30feb90268f''), ''b'': 2}

Estoy usando pymongo para consultar todos los elementos en una región (en realidad es para consultar todos los lugares en una región en un mapa). db.command(SON()) antes de buscar en una región esférica, que me puede devolver un diccionario y en el diccionario hay una clave llamada results que contiene los lugares. Ahora necesito buscar en un área cuadrada y se me sugiere usar db.places.find , sin embargo, esto me devuelve una clase de pymongo.cursor.Cursor y no tengo idea de cómo extraer los resultados del lugar.

¿Alguien sabe si debo convertir el cursor en un dict y extraer los resultados, o usar otro método para consultar elementos en una región cuadrada? Por cierto, db es pymongo.database.Database class

Los códigos son:

>>> 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)

Tengo valores de ll_lng, ll_lat, ur_lng y ur_lat, use estos valores pero no imprime nada de estos códigos


El método de find MongoDB no devuelve un solo resultado, sino una lista de resultados en forma de un Cursor . Este último es un iterador, por lo que puede recorrerlo con un bucle for .

Para su caso, solo use el método findOne lugar de find . Esto le devolverá un solo documento como un diccionario.


Fácil

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

Hay que ir


Sugiero crear una lista y añadir diccionario en ella.

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

Ahora x es una lista de diccionarios, se puede manipular de la misma manera en la forma habitual de los pitones.