mongoclient docs delete_many create collection python mongodb pymongo

python - docs - pymongo projection



Objeto de colección no es un error invocable con PyMongo (3)

A lo largo del tutorial PyMongo, aparece un error al llamar al método insert_one en una colección.

In [1]: import pymongo In [2]: from pymongo import MongoClient In [3]: client = MongoClient() In [4]: db = client.new_db In [5]: db Out[5]: Database(MongoClient(''localhost'', 27017), u''new_db'') In [6]: posts = db.posts In [7]: posts.insert_one({''a'':1}) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-2271c01f9a85> in <module>() ----> 1 posts.insert_one({''a'':1}) C:/Anaconda/lib/site-packages/pymongo-2.8-py2.7-win32.egg/pymongo/collection.py in __call__(self, *a rgs, **kwargs) 1771 "call the ''%s'' method on a ''Collection'' object it is " 1772 "failing because no such method exists." % -> 1773 self.__name.split(".")[-1]) TypeError: ''Collection'' object is not callable. If you meant to call the ''insert_one'' method on a ''Collection'' object it is failing because no such method exists.

Hay algunas publicaciones en línea que analizan este error, pero todas parecen ser cuando el usuario llama a un nombre obsoleto.

¿Alguna orientación sobre lo que estoy haciendo mal aquí?


El problema es que está siguiendo el tutorial de la documentación de la versión actual, pero en realidad tiene instalado PyMongo 2.8.

El método insert_one() es nuevo en PyMongo 3.0 y ahora se transfiere a PyMongo 2.9 . Por lo tanto, es evidente que deberá instalar PyMongo 2.9 o una versión más nueva para poder usar la nueva función API.

Puede instalar o actualizar su controlador usando pip como.

python -m pip install -U pymongo


Es una pregunta clara, pero el problema aquí parece ser que estás leyendo la documentación de la tutorial , pero con toda probabilidad, en realidad tienes instalado "pymongo" 2.8 en lugar del "3.0b" al que se hace referencia en el enlace. citar.

El tutorial de lanzamiento 2.8 señala el método .insert() lugar:

posts.insert({''a'':1})

Dado que .insert_one() solo está disponible en el controlador 3.0b.

O fuerce la instalación del controlador "beta" o viva con un controlador estable y los métodos disponibles.

Esto parece ser el error de la "respuesta del motor de búsqueda" actual que coincide con la "versión beta" como "actual".


Yo también estaba enfrentando el mismo problema. Cuando intenté actualizar mi distribución PyMongo usando el comando,

pip install -U pymongo

Tuve el siguiente error :

error: no se pudo crear ''/usr/local/lib/python2.7/dist-packages/pymongo'': Permiso denegado

Aparentemente, en mi distribución, el instalador no pudo crear una biblioteca en la carpeta dist-packages debido a privilegios de permiso insuficientes. Entonces, resolví el problema otorgándole permisos de escritura y reinstalando el controlador de PyMongo:

cd /usr/local/lib/python2.7/ sudo chmod 0777 dist-packages pip install -U pymongo

Espero que esto ayude.