Jak třídit dokumenty MongoDB ve Sbírce pomocí Pythonu

Úvod

když je voláno dotazování dokumentů, MongoDB vrátí objekt pymongo.cursor.Cursor obsahující data o výsledcích dotazu. Tento objekt kurzoru má metodu atributu nazvanou sort(), která umožňuje třídění dokumentů MongoDB a dat, která mají být iterována a organizována abecedně nebo číselně, čímž je proces iterace efektivnější. Při třídění dokumentů MongoDB pomocí Pythonu, volání metody do třídy kolekce, která vrací objekt slovníku, jako find_one(), nebude mít žádné vestavěné metody jako sort(). Uživatelé si mohou vyzkoušet následující příklady pro třídění MongoDB dokumentů s PYMongo pomocí Idle prostředí Pythonu otevřením terminálu nebo okna příkazového řádku a zadáním „idle3 „pro Python 3 verze IDLE, nebo jen“ idle" pro Python 2.

předpoklady pro třídění MongoDB dokumentů

  • pracovní znalost Pythonu a jeho syntaxe.
  • správně nainstalovaný interpret Pythonu.

Poznámka: Python 2.7 je zastaralý a plánuje ztratit dlouhodobou podporu 2020, jako takový, Python 3 se doporučuje pro provádění příkladů v tomto tutoriálu.

  • ovladač Pymongo Python pro MongoDB musí být nainstalován se správcem balíčků Pip, jak je ukázáno zde:
1
pip3 instalace pymongo
  • pomocí příkazu netcat (nc), který je uveden níže, v unixovém terminálu potvrďte, že MongoDB běží na portu 27017:
1
NC-v localhost 27017

terminál by měl výstup něco, co se podobá následující:

Connection to localhost port 27017 succeeded!

stiskněte klávesy CTRL + C pro ukončení.

jak vytvořit instanci kolekce z třídy MongoClient Pymongo

je důležité importovat třídu pymongo MongoClient v horní části skriptu a vytvořit objekt kolekce uložené v databázi MongoDB, jak je ukázáno zde:

1
2
# importujte třídu MongoClient z pymongo
z pymongo import MongoClient

dále vytvořte novou klientskou instanci MongoClient a otevřete databázi, která má sbírku s dokumenty, jako v tomto příkladu:

1
2
3
4
5
# vytvořte klientskou instanci třídy MongoClient
mongo_client = MongoClient (‚mongodb://localhost:27017‘)
# create database instance
db = mongo_client

nyní otevřete metodu find() kolekce pomocí objektu db. Pokud chcete dotazovat všechny dokumenty sbírky, předejte metodě prázdný slovník ({}), jak je ukázáno zde:

1
kurzor = db.najít( {} )

jak najít kolekci MongoDB s dokumenty na ní

zavolejte jednu z metod třídy kolekce, které vracejí objekty pymongo.cursor, jako jsou metody find() nebo find_raw_batches(), a použijte tyto objekty k filtrování a dotazování dokumentů.

volání metody pymongo ‚ s find () a nechat ji vrátit pymongo.kurzor.Objekt kurzoru

všechny objekty kurzoru v PyMongo by měly pracovat s metodou sort(). Pro potvrzení použijte funkci Pythonu hasattr(), jak je ukázáno zde:

1
tisk („Cursor obj má‘ sort ()‘:“, hasattr (cursor, „sort“))

pokud je provedeno správně, Python by měl vytisknout True do okna terminálu nebo nečinnosti.

seznam příkladů dokumentů MongoDB použitých v tomto tutoriálu

příklady v tomto tutoriálu, které jsou uvedeny níže, jsou ze sbírky složené z pouhých šesti dokumentů, které obsahují "last name", "first name", "gender" řetězcová pole a "age" celočíselné pole:

1
2
3
4
5
6
{‚_id‘: ObjectId(‚5cff441e72ccde332cf3a213‘), ‚last name‘: ‚Truk‘, ‚first name‘: ‚Ezekiel‘, ‚gender‘: ‚Male‘, ‚age‘: 45},
{‚_id‘: ObjectId(‚5cff445a72ccde332cf3a214‘), ‚last name‘: ‚Nan‘, ‚first name‘: ‚Clara‘, ‚gender‘: ‚Female‘, ‚age‘: 23},
{‚_id‘: ObjectId(‚5cff449e72ccde332cf3a215‘), ‚last name‘: ‚Shulman‘, ‚first name‘: ‚Corinthian‘, ‚gender‘: ‚Male‘, ‚age‘: 52},
{‚_id‘: ObjectId(‚5cff44aa72ccde332cf3a216‘), ‚last name‘: ‚Erickson‘, ‚first name‘: ‚Janet‘, ‚gender‘: ‚Female‘, ‚age‘: 36},
{‚_id‘: ObjectId(‚5cff44b972ccde332cf3a217‘), ‚last name‘: ‚Atkins‘, ‚first name‘: ‚Carmen‘, ‚gender‘: ‚Female‘, ‚age‘: 26},
{‚_id‘: ObjectId(‚5cff44c572ccde332cf3a218‘), ‚last name‘: ‚Paleozoic‘, ‚first name‘: ‚Josephus‘, ‚gender‘: ‚Male‘, ‚age‘: ’24‘}

Screenshot nečinnosti Pythonu získání dokumentů v kolekci MongoDB a kontrola find () pro atribut sort ()

jak používat metodu sort () objektu kurzoru k uspořádání dokumentů MongoDB

metoda řazení nevyžaduje, aby byl předán parametr pro objednávku. Pokud je pouze název pole předán sort(), pak ve výchozím nastavení uspořádá data v pořadí ASCENDING.

nechte volání find().sort() vrátit objekt kurzoru, aby dokumenty mohly být iterovány, jak je ukázáno zde:

1
kurzor = db.najít().Seřadit („křestní jméno“)

iterovat objekt kurzoru vrácený filtrem sort ()

dokumenty vrácené MongoDB v objektu kurzoru lze iterovat podobně jako seznam Pythonu pomocí iterátoru, jako je for, nebo pomocí funkce enumerate(), jak je ukázáno zde:

1
2
3
4
5
6
# ověřte, že MongoDB vrátil objekt kurzoru
pokud hasattr(cursor, „sort“) == True:
# iterovat nad kurzorem obj pro dokumenty
pro num, doc in enumerate(cursor):
print (num, „–>“, doc, „\n“)

dokument vrácený v každé iteraci by měl být objekt slovníku Python, který má pole dokumentu, včetně jeho "_id" jako klíče objektu dict .

použití Idle Pythonu k třídění MongoDB dokumentů a iteraci nad objektem kurzoru Pymongo

Screenshot funkce enumerate() iterující nad objektem kurzoru pymongo vráceným metodou sort ()

jak předat více parametrů metodě sort() k použití průsečíkového třídění a zvrátit pořadí řazení

při předávání více než jen řetězce názvu pole, objektu n-tice, se dvěma hodnotami, musí být předán uvnitř seznamu. Pokud používáte více než jeden parametr třídění, stačí předat další n-tice uvnitř seznamu.

následuje příklad, který seřadí "age" lidí v sestupném pořadí (-1) a také seřadí jejich příjmení ve vzestupném pořadí (1):

1
2
3
4
5
kurzor = db.najít( {} ).Seřadit(

)

Screenshot nečinnosti pomocí dvou různých parametrů řazení v kolekci MongoDB

jak připojit dokumenty MongoDB v objektu kurzoru k běžnému seznamu Pythonu

dokumenty vrácené Iterátorem kurzoru jsou pouze pravidelné Python dict objekty obsahu dokumentu. Ty lze vložit do seznamu pomocí operátoru += :

1
2
3
4
5
6
7
8
9
# vytvořit prázdný seznam pro ukládání dokumentů
sorted_docs =
# iterovat nad objektem kurzoru pro dokumenty MongoDB
pro num, doc v enumerate (cursor):
# připojit objekt dict do seznamu
sorted_docs +=
tisk („total docs:“, len (sorted_docs) )

volání Sort API se nepodaří správně uspořádat data, pokud je pole v dokumentu nesprávným datovým typem

pokud je pouze jedno z polí pouze v jednom z dokumentů nesprávným datovým typem, např. dokument má typ řetězce pro celé pole, pak metoda sort() selže správně třídit.

metoda pymongo sort (), která nedokáže řadit celé pole

níže, je příkladem metody PyMongo sort(), která nedokáže řadit celé pole, protože jeden z dokumentů má nesprávný datový typ:

pokud metoda sort() selže, nejprve zkontrolujte datový typ celočíselného pole dokumentu a potvrďte, že všechny dokumenty mají celé číslo pro datový typ.

jak používat metodu pymongo update_many ()

níže je uveden příklad použití metody pymongo update_many() nebo MongoDB Compass UI k aktualizaci a opravě dat:

jak filtrovat celé pole pomocí $gh a třídit data podle tohoto pole

níže je uveden příklad, jak použít filtr větší než ($gt) a metodu řazení dohromady:

1
2
3
4
# získejte pouze dokumenty s „věkem“ > 40 a seřaďte je podle „věku“
cursor = db.najít (
{„věk“: {„$gt“:40}}
).Seřadit () # Seřadit věk podle sestupného pořadí

>poznámka: číslo představující druhou položku objektu n-tice předaného sort() je pořadí řazení. 1 je pro ASCENDING a -1 je pro DESCENDING pořadí.

jak třídit dokumenty MongoDB podle pole, ale vrátit jiný typ pole

druhý parametr slovníku lze také předat metodě find() a nechat volání API vrátit pouze tento datový typ, ale stále mít data seřazená podle jiného názvu pole voláním sort().

jak vrátit pouze jeden datový typ pomocí sort () a druhý parametr v find()

v níže uvedeném příkladu toto volání API vrátí pouze data pole "first name" a "_id" kolekce MongoDB, ale bude v sestupném pořadí pomocí dat celého pole "age" :

1
kurzor = db.najít ({}, {„jméno“: 1 }).Seřadit( )

Screenshot nečinnosti Pythonu iterace objektu kurzoru se tříděnými daty dvou polí

závěr

tento tutoriál vysvětlil, jak používat metodu PyMongo sort() a jak předat více parametrů pro provádění složeného filtrování a třídění dokumentů MongoDB. Mějte na paměti, že při třídění dokumentů MongoDB v Pythonu se volání sort API nezdaří, pokud má pole v dokumentu nesprávný datový typ. Metoda řazení se nepodaří správně třídit, pokud i jedno z polí v jednom z dokumentů obsahuje nesprávný datový typ. Nejčastějším důvodem selhání při třídění dokumentů MongoDB metodou třídění PYMongo je obvykle vázáno na ne všechny dokumenty, které mají celé číslo pro datový typ. Nezapomeňte také, že číslo představující druhou položku objektu n-tice předaného sort() je pořadí řazení, s 1 pro ASCENDING a -1 pro DESCENDING pořadí.

jen kód

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin / env python3
# – * – kódování: utf-8 -*-
# vytvořit klientskou instanci třídy MongoClient
mongo_client = MongoClient (‚mongodb: / / localhost:27017‘)
# create database instance
db = mongo_client
# a simple find () API call to get documents
cursor = db.find ({})
# check if Cursor obj has the „sort“ attr
print („Cursor obj has ‚sort ()‘:“, hasattr(cursor,“ sort“))
# verify that MongoDB returned a Cursor object
if hasattr(cursor, „sort“) == True:
# iterate over the Cursor obj for docs
for num, doc in enumerate (cursor):
tisk (num, “ –>“, doc, „\n“)
# uspořádejte MongoDB dokumenty pomocí dvou parametrů řazení
# 1 = vzestupně a -1 = sestupně
kurzor = db.najít( {} ).Seřadit(

)
# vytvořit prázdný seznam pro uložení dokumentů
sorted_docs =
# iterovat nad objektem kurzoru pro dokumenty MongoDB
pro num, doc v enumerate(cursor):
# připojit objekt dict do seznamu
sorted_docs +=
print ( „total docs:“, len (sorted_docs) )

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.