Objek koleksi bukan kesalahan yang dapat dipanggil dengan PyMongo

Mengikuti tutorial PyMongo dan saya mendapatkan kesalahan saat memanggil metode insert_one pada koleksi.

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.

Ada beberapa posting online yang membahas kesalahan ini tetapi semuanya tampaknya terjadi ketika pengguna memanggil nama yang tidak digunakan lagi.

Adakah panduan tentang kesalahan yang saya lakukan di sini?


person Jason Strimpel    schedule 11.03.2015    source sumber
comment
Saya hanya ingin menambahkan bahwa ini adalah contoh dari apa yang disebut di sini sebagai contoh yang jelas. Pemantauan tersebut sebaiknya mengikuti contoh yang ada.   -  person Neil Lunn    schedule 11.03.2015
comment
Ini juga terjadi pada saya. Terima kasih telah memposting =).   -  person rockerBOO    schedule 21.03.2015


Jawaban (3)


Ini adalah pertanyaan yang jelas tetapi masalahnya di sini sepertinya Anda membaca dari rilis "beta" dokumentasi tetapi kemungkinan besar Anda sebenarnya paling banyak menginstal "pymongo" 2.8 daripada "3.0b" yang dirujuk dalam tautan yang Anda kutip.

Tutorial rilis 2.8 menunjuk ke .insert() sebagai gantinya:

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

Karena .insert_one() hanya tersedia di driver 3.0b .

Baik memaksa penginstalan driver "beta" atau langsung menggunakan driver yang stabil dan metode yang tersedia.

Tampaknya ini adalah kesalahan dari "respon mesin pencari" saat ini yang mencocokkan "rilis beta" dengan "terkini".

person Neil Lunn    schedule 11.03.2015
comment
@ strimp099 Sebenarnya bukan salahmu. Rasakan rasa sakitmu. Ini hanyalah produk sampingan dari perubahan yang dikeluarkan pada rilis MongoDB 3.0 baru-baru ini. Pengemudi berganti untuk memastikan mereka tetap mengikuti. Secara khusus, ini semua tentang penggunaan API Operasi Massal dengan metode tertentu. - person Neil Lunn; 11.03.2015
comment
Ya, saya punya pymongo 3.7 dan masih mendapatkan pesan kesalahan yang sama. Menggunakan insert bukannya insert_one tidak membantu. - person Philipp Ludwig; 10.12.2020

Masalahnya adalah Anda mengikuti tutorial dari dokumentasi rilis saat ini tetapi sebenarnya sudah menginstal PyMongo 2.8.

Metode insert_one() baru di PyMongo 3.0 sekarang di-backport di PyMongo 2.9. Jadi jelas Anda perlu menginstal PyMongo 2.9 atau versi yang lebih baru untuk menggunakan fitur API baru.

Anda dapat menginstal atau mengupgrade driver Anda menggunakan pip like.

python -m pip install -U pymongo
person styvane    schedule 11.03.2015

Saya juga menghadapi masalah yang sama. Ketika saya mencoba memutakhirkan distribusi PyMongo saya menggunakan perintah,

pip install -U pymongo

Saya mendapat kesalahan berikut:

kesalahan: tidak dapat membuat '/usr/local/lib/python2.7/dist-packages/pymongo': Izin ditolak

Rupanya, di distro saya, penginstal tidak dapat membuat perpustakaan di folder dist-packages karena hak izin tidak mencukupi. Jadi, saya memecahkan masalah dengan memberinya izin menulis dan menginstal ulang driver PyMongo:

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

Semoga ini membantu.

person Siddharth Karnam    schedule 12.10.2015
comment
Anda tidak boleh mengubah izin ini tetapi gunakan sudo -H pip install -U pymongo atau pip install --user -U pymongo - person PvdL; 19.07.2018
comment
Anda mungkin juga perlu menjalankan pip sebagai administrator di Windows jika Anda menginstalnya sebagai administrator. - person Allan Elder; 02.08.2018