createIndex的文档中,他们说db.collection.createIndex(keys, options)所以我用下面的代码调用createIndex()。我的数据库名为articles,集合名为bce。在bce里面已经有一个域article的文档。

class Stockage():
    def __init__(self):
        self.connexion()

    def connexion(self):
        client = pymongo.MongoClient("localhost", 27017)
        self.bce = client.articles.bce

sql = Stockage()
sql.bce.createIndex({article : "text"})

我有以下错误:
Traceback (most recent call last):

  File "<ipython-input-1132-fc8762d315d1>", line 1, in <module>
    sql.bce.createIndex({article : "text"})

  File "C:\ProgramData\Anaconda3\lib\site-packages\pymongo\collection.py", line 3321, in __call__
    self.__name.split(".")[-1])

TypeError: 'Collection' object is not callable. If you meant to call the 'createIndex' method on a 'Collection' object it is failing because no such method exists.

不是收藏品吗?

最佳答案

这是因为在pymongo中,该方法被称为create_index(),而不是createIndex(),因为它是在mongoshell中命名的。
与它的mongoshell对应项相比,它的参数格式也不同。它不接受document/dict作为索引规范,而是接受元组列表。这是因为不能保证python中dict键的顺序。
所以正确的行应该是:

sql.bce.create_index([("article", pymongo.TEXT)])

更多详情请参见Pymongo Collection页。

08-26 05:13