194 votes

Comment trier mongodb avec pymongo

J'essaie d'utiliser la fonctionnalité de tri lors de l'interrogation de ma mongoDB, mais elle échoue. La même requête fonctionne dans la console MongoDB mais pas ici. Le code est le suivant:

 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
 

L'erreur que je reçois est la suivante:

 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
 

J'ai trouvé un lien ailleurs qui indique que je dois placer un «u» devant la clé si j'utilise du pymongo, mais cela n'a pas fonctionné non plus. Quelqu'un d'autre veut que cela fonctionne ou est-ce un bug?

356voto

Ben Points 6731

.sort() , dans pymongo, prend key et direction .

Donc, si vous voulez trier par, disons, id alors vous devriez .sort("_id", 1)

41voto

new_light Points 11

Vous pouvez essayer ceci:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X