Ich versuche, die Sortierfunktion beim Abfragen meiner mongoDB zu verwenden, aber es schlägt fehl. Dieselbe Abfrage funktioniert in der MongoDB-Konsole, aber nicht hier. Code ist wie folgt:
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
Der Fehler, den ich erhalte, ist wie folgt:
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
Ich habe an anderer Stelle einen Link gefunden, der besagt, dass ich ein ‘u’ vor den Schlüssel setzen muss, wenn ich Pymongo verwende, aber auch das hat nicht funktioniert. Jeder andere bekommt das zum Laufen oder ist das ein Bug.
Ben
.sort(), in pymongo, dauert key und direction als Parameter.
Wenn Sie also sortieren möchten, sagen wir, id dann solltest du .sort("_id", 1)
Ich verwende dies in meinem Code, bitte kommentieren Sie, wenn ich hier etwas falsch mache, danke.
Du solltest benutzen: ASCENDING und DESCENDING von pymongo. 🙂
– Sn0pY
30. Okt ’18 um 22:30
romulomadu
Warum verwendet Python eine Liste von Tupeln anstelle von dict?
In Python können Sie nicht garantieren, dass das Wörterbuch in der von Ihnen angegebenen Reihenfolge interpretiert wird.
Also, in Mongo Shell könnten Sie tun .sort({'field1':1,'field2':1}) und der Interpreter würde Feld 1 auf der ersten Ebene und Feld 2 auf der zweiten Ebene sortieren.
Wenn diese Syntax in Python verwendet wurde, besteht die Möglichkeit der Sortierung nach Feld2 auf der ersten Ebene. Bei tupel besteht dieses Risiko nicht.
Python verwendet Schlüssel, Richtung. Sie können den obigen Weg verwenden.
Also in deinem Fall kannst du das machen
for post in db.posts.find().sort('entities.user_mentions.screen_name',pymongo.ASCENDING):
print post
Ayse
DESC & ASC :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
col = db["customers"]
doc = col.find().sort("name", -1) #
for x in doc:
print(x)
###################
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
col = db["customers"]
doc = col.find().sort("name", 1) #
for x in doc:
print(x)
.
2231700cookie-checkSo sortieren Sie Mongodb mit Pymongoyes