Python MongoDB Запрос документов

Python Mongodb Python Mongodb

В MongoDB методы find и find_one используются для запроса данных в коллекциях, аналогично оператору SELECT в SQL.

Тестовые данные, используемые в этой статье, следующие:

Запрос одного документа

Мы можем использоватьfind_one()метод для запроса одного документа в коллекции.

Запросsitesпервого документа в коллекции:

Пример

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

Результат вывода:

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

Запрос всех документов в коллекции

Метод find()может запрашивать все данные в коллекции, подобно операцииSELECT *в SQL.

В следующем примере выполняется поиск всех документов в коллекцииsites:

Пример

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

Результат вывода:

{'_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'}

Запрос конкретных полей

Мы можем использовать метод find() для запроса конкретных полей, устанавливая соответствующее значение возвращаемого поля равным 1.

Пример

#!/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)

Результат вывода:

{'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'}

За исключением _id, нельзя указывать одновременно 0 и 1 в одном объекте. Если для одного поля задать 0, все остальные будут 1, и наоборот.

В следующем примере возвращаются все поля, кроме поля alexa:

Пример

#!/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)

Результат вывода:

{'_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'}

Следующий код выдаст ошибку, если указаны и 0, и 1:

Пример

#!/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)

Текст ошибки примерно следующий:

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

Запрос с указанными условиями

Мы можем задать параметры вfind(), чтобы фильтровать данные.

В следующем примере выполняется поиск данных, где поле name имеет значение "EXAMPLE":

Пример

#!/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)

Результат вывода:

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

Расширенный запрос

В операторах условий запроса мы также можем использовать модификаторы.

В следующем примере считываются данные, где первая буква поля name имеет значение ASCII больше "H". Условие модификатора "больше" —{"$gt": "H"} :

Пример

#!/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)

Результат вывода:

{'_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'}

Запрос с использованием регулярных выражений

Мы также можем использовать регулярные выражения в качестве модификаторов.

Модификаторы регулярных выражений используются только для поиска по строковым полям.

В следующем примере считываются данные, где первая буква поля name — "R". Условие модификатора регулярного выражения —{"$regex": "^R"} :

Пример

#!/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)

Результат вывода:

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

Возврат заданного количества записей

Если мы хотим ограничить результаты запроса заданным количеством записей, можно использовать методlimit(), который принимает только один числовой параметр.

В следующем примере возвращаются 3 записи документов:

Пример

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # Вывод результата for x in myresult: print(x)

Результат вывода:

{'_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

Другие расширения