So sortieren Sie Mongodb mit Pymongo

Lesezeit: 3 Minuten

So sortieren Sie Mongodb mit Pymongo
WildBill

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.

1641743807 962 So sortieren Sie Mongodb mit Pymongo
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)

Für mehrere Felder:

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

  • .sort([("field1",pymongo.ASCENDING), ("field2",pymongo.DESCENDING)]) um mehrere Felder zu sortieren.

    – richardr

    10. Okt ’12 um 16:31


  • Für diejenigen, die weitere Details suchen, ist hier ein Link zur Dokumentation zum Sortieren mit Pymongo api.mongodb.org/python/current/api/pymongo/…

    – Shane Reustle

    21. Januar ’15 um 6:24


  • HINWEIS: aufsteigend: 1, absteigend -1

    – Martlark

    6. April ’15 um 23:01

  • Haben Sie eine Idee, warum sie die so einfache JSON-Notation {“field1”: 1, “field2”: 1} abgeschlachtet haben?

    – Nico

    20. August ’18 um 19:50

  • @Nico – siehe Romulomadu-Antwort unten

    – Bajal

    1. Okt ’18 um 14:30

1641743807 839 So sortieren Sie Mongodb mit Pymongo
neues Licht

Sie können dies versuchen:

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

Das funktioniert auch:

db.Account.find().sort('UserName', -1)
db.Account.find().sort('UserName', 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

So sortieren Sie Mongodb mit Pymongo
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.

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

Sortiere nach _id absteigend:

collection.find(filter={"keyword": keyword}, sort=[( "_id", -1 )])

Sortiere nach _id aufsteigend:

collection.find(filter={"keyword": keyword}, sort=[( "_id", 1 )])

1641743807 74 So sortieren Sie Mongodb mit Pymongo
Ash Upadhyay

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

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

1641743807 753 So sortieren Sie Mongodb mit Pymongo
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)

.

223170cookie-checkSo sortieren Sie Mongodb mit Pymongo

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy