Python MongoDB Dokumente abfragen

Python Mongodb Python MongoDB

In MongoDB werden die Methoden find und find_one verwendet, um Daten in Sammlungen abzufragen, ähnlich wie die SELECT-Anweisung in SQL.

Die in diesem Artikel verwendeten Testdaten sind wie folgt:

Ein Dokument abfragen

Wir können die Methodefind_one()verwenden, um ein Dokument in einer Sammlung abzufragen.

Abfrage des ersten Dokuments in der Sammlungsites:

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] x = mycol.find_one() print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Alle Dokumente in einer Sammlung abfragen

find()-Methode kann alle Daten in einer Sammlung abfragen, ähnlich derSELECT *-Operation in SQL.

Das folgende Beispiel findet in der Sammlungsitesalle Dokumente:

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find(): print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}

Bestimmte Felder abfragen

Wir können die find()-Methode verwenden, um bestimmte Felder abzufragen, indem wir den entsprechenden Wert des zurückzugebenden Feldes auf 1 setzen.

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): print(x)

Das Ausgabeergebnis ist:

{'name': 'EXAMPLE', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}

Außer bei _id können Sie nicht sowohl 0 als auch 1 in einem Objekt angeben. Wenn Sie ein Feld auf 0 setzen, sind alle anderen 1, und umgekehrt.

Das folgende Beispiel gibt alle Felder außer dem Feld alexa zurück:

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "alexa": 0 }): print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}

Der folgende Code meldet einen Fehler, wenn sowohl 0 als auch 1 angegeben sind:

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "name": 1, "alexa": 0 }): print(x)

Der Fehlerinhalt sieht ungefähr wie folgt aus:

...
pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.
...

Abfrage mit angegebenen Bedingungen

Wir können Parameter infind()festlegen, um Daten zu filtern.

Das folgende Beispiel findet Daten, bei denen das Feld name "EXAMPLE" ist:

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": "EXAMPLE" } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Erweiterte Abfrage

In Abfragebedingungsanweisungen können wir auch Modifikatoren verwenden.

Das folgende Beispiel liest Daten, bei denen der erste Buchstabe des Feldes name einen ASCII-Wert größer als "H" hat. Die Bedingung des Größer-als-Modifikators ist{"$gt": "H"} :

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": { "$gt": "H" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}

Abfrage mit regulären Ausdrücken

Wir können auch reguläre Ausdrücke als Modifikatoren verwenden.

Modifikatoren für reguläre Ausdrücke werden nur zum Durchsuchen von String-Feldern verwendet.

Das folgende Beispiel liest Daten, bei denen der erste Buchstabe des Feldes name "R" ist. Die Bedingung des Modifikators für reguläre Ausdrücke ist{"$regex": "^R"} :

Beispiel

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Eine angegebene Anzahl von Datensätzen zurückgeben

Wenn wir die Abfrageergebnisse auf eine angegebene Anzahl von Datensätzen begrenzen möchten, können wir dielimit()Methode verwenden, die nur einen numerischen Parameter akzeptiert.

Das folgende Beispiel gibt 3 Dokumentdatensätze zurück:

Beispiel

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # Ergebnis ausgeben for x in myresult: print(x)

Das Ausgabeergebnis ist:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}

Python Mongodb Python MongoDB

Andere Erweiterungen