python - mongoclient - pymongo limit
Cómo ordenar mongodb con pymongo (5)
¿Por qué Python usa una lista de tuplas en lugar de dict?
En Python no puede garantizar que el diccionario se interpretará en el orden que usted declaró.
Entonces, en mongo shell puedes hacer .sort({''field1'':1,''field2'':1})
y el intérprete debe ordenar el campo1 en el primer nivel y el campo 2 en el segundo nivel.
Si este sintax se usó en python, existe la posibilidad de ordenar field2 en el primer nivel. Con la tupla no hay riesgo.
.sort([("field1",pymongo.ASCENDING), ("field2",pymongo.DESCENDING)])
Estoy tratando de usar la función de ordenar cuando consulto mi mongoDB, pero está fallando. La misma consulta funciona en la consola MongoDB pero no aquí. El código es el siguiente:
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
El error que obtengo es el siguiente:
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
Encontré un enlace en otro lado que dice que necesito colocar una ''u'' delante de la tecla si uso Pymongo, pero tampoco funcionó. Alguien más consigue que esto funcione o es un error.
Esto también funciona:
db.Account.find().sort(''UserName'', -1)
db.Account.find().sort(''UserName'', 1)
Estoy usando esto en mi código, por favor comente si estoy haciendo algo mal aquí, gracias.
Puedes intentar esto:
db.Account.find().sort("UserName")
db.Account.find().sort("UserName",pymongo.ASCENDING)
db.Account.find().sort("UserName",pymongo.DESCENDING)
.sort()
, en pymongo, toma la key
y la direction
como parámetros.
Entonces, si quiere ordenar por, digamos, id
, entonces debe .sort("_id", 1)
Para múltiples campos:
.sort([("field1", pymongo.ASCENDING), ("field2", pymongo.DESCENDING)])
.sort([("field1",pymongo.ASCENDING), ("field2",pymongo.DESCENDING)])
Python usa la clave, dirección. Puedes usar el camino anterior.
Entonces en tu caso puedes hacer esto
for post in db.posts.find().sort(''entities.user_mentions.screen_name'',pymongo.ASCENDING):
print post