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

Запрос одного документа
Мы можем использоватьfind_one()метод для запроса одного документа в коллекции.
Запросsitesпервого документа в коллекции:
Пример
Результат вывода:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
Запрос всех документов в коллекции
Метод find()может запрашивать все данные в коллекции, подобно операцииSELECT *в SQL.
В следующем примере выполняется поиск всех документов в коллекцииsites:
Пример
Результат вывода:
{'_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.
Пример
Результат вывода:
{'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:
Пример
Результат вывода:
{'_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:
Пример
Текст ошибки примерно следующий:
... pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion. ...
Запрос с указанными условиями
Мы можем задать параметры вfind(), чтобы фильтровать данные.
В следующем примере выполняется поиск данных, где поле name имеет значение "EXAMPLE":
Пример
Результат вывода:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
Расширенный запрос
В операторах условий запроса мы также можем использовать модификаторы.
В следующем примере считываются данные, где первая буква поля name имеет значение ASCII больше "H". Условие модификатора "больше" —{"$gt": "H"} :
Пример
Результат вывода:
{'_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"} :
Пример
Результат вывода:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
Возврат заданного количества записей
Если мы хотим ограничить результаты запроса заданным количеством записей, можно использовать методlimit(), который принимает только один числовой параметр.
В следующем примере возвращаются 3 записи документов:
Пример
Результат вывода:
{'_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