Подтвердить что ты не робот

Как сортировать mongodb с pymongo

Я пытаюсь использовать функцию сортировки при запросе моего mongoDB, но он терпит неудачу. Тот же запрос работает в консоли MongoDB, но не здесь. Код выглядит следующим образом:

import pymongo

from  pymongo import Connection
connection = Connection()
db = connection.myDB
print db.posts.count()
for post in db.posts.find({}, {'entities.user_mentions.screen_name':1}).sort({u'entities.user_mentions.screen_name':1}):
    print post

Ошибка, которую я получаю, выглядит следующим образом:

Traceback (most recent call last):
  File "find_ow.py", line 7, in <module>
    for post in db.posts.find({}, {'entities.user_mentions.screen_name':1}).sort({'entities.user_mentions.screen_name':1},1):
  File "/Library/Python/2.6/site-packages/pymongo-2.0.1-py2.6-macosx-10.6-universal.egg/pymongo/cursor.py", line 430, in sort
  File "/Library/Python/2.6/site-packages/pymongo-2.0.1-py2.6-macosx-10.6-universal.egg/pymongo/helpers.py", line 67, in _index_document
TypeError: first item in each key pair must be a string

Я нашел ссылку в другом месте, где говорится, что мне нужно разместить "u" infront ключа, если вы используете pymongo, но это тоже не сработало. Любой другой может заставить это работать или это ошибка.

4b9b3361

Ответ 1

.sort(), в pymongo, принимает key и direction как параметры.

Итак, если вы хотите отсортировать, скажем, id, тогда вы должны .sort("_id", 1)

Для нескольких полей:

.sort([("field1", pymongo.ASCENDING), ("field2", pymongo.DESCENDING)])

Ответ 2

Вы можете попробовать следующее:

db.Account.find().sort("UserName")  
db.Account.find().sort("UserName",pymongo.ASCENDING)   
db.Account.find().sort("UserName",pymongo.DESCENDING)  

Ответ 3

Это также работает:

db.Account.find().sort('UserName', -1)
db.Account.find().sort('UserName', 1)

Я использую это в своем коде, прошу прокомментировать, если я делаю что-то неправильно здесь, спасибо.

Ответ 4

.sort([("field1",pymongo.ASCENDING), ("field2",pymongo.DESCENDING)])

Python использует ключ, направление. Вы можете использовать вышеуказанный способ.

Итак, в вашем случае вы можете сделать это

for post in db.posts.find().sort('entities.user_mentions.screen_name',pymongo.ASCENDING):
        print post