Использование Find в pymongo - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу использовать .find() как это для mongoDB в Python:

import pymongo

client = pymongo.MongoClient('mongodb://localhost:27000')
db = client['responsi']
cursor = db['produk']

for x in cursor.find({"pricing.pct_savings":{"$gt":25}}).sort({"pricing.pct_savings":-1}):
    print(x)

Но, это показывает ошибку, подобную этой:

Traceback (most recent call last):
  File "Find.py", line 7, in <module>
    for x in cursor.find({"pricing.pct_savings":{"$gt":25}}).sort({"pricing.pct_savings":-1}):
  File "G:\PROGRAM FILES\Python\lib\site-packages\pymongo\cursor.py", line 708, in sort
    keys = helpers._index_list(key_or_list, direction)
  File "G:\PROGRAM FILES\Python\lib\site-packages\pymongo\helpers.py", line 69, in _index_list
    raise TypeError("if no direction is specified, "
TypeError: if no direction is specified, key_or_list must be an instance of list

Как решить эту проблему?Спасибо!Извините, у меня плохой результат на английском.

1 Ответ

0 голосов
/ 02 декабря 2018

В отличие от оболочки mongo, pymongo принимает key и direction в качестве аргументов для метода сортировки (или списка, но это другая форма, которая не относится к вам в настоящее время, я покажу ее тоже)
Таким образом, ваш запрос на самом деле должен быть cursor.find({"pricing.pct_savings":{"$gt":25}}).sort("pricing.pct_savings", pymongo.DESCENDING)

Другая форма получает список кортежей имени поля и направления и позволяет сортировать по нескольким полям, например collection.find().sort([('my_field_1',pymongo.DESCENDING), ('my_field_2',pymongo.ASCENDING)])

См. Соответствующую документацию здесь https://api.mongodb.com/python/current/api/pymongo/cursor.html?highlight=sort#pymongo.cursor.Cursor.sort

Здесь вы можете найти ASCENDING и DESCENDING константы https://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.ASCENDING

Кстати (не относится к вашему первоначальному вопросу) db['produk']на самом деле это коллекция, а не курсор, поэтому было бы лучше, если бы вы назвали ее коллекцией, а не курсором.Курсор - это то, что find() возвращает

...