В данной статье мы рассмотрим способы запроса документа коллекции в MongoDB.
Метод find()
Для запроса элемента коллекции в MongoDB нам необходимо использовать метод find(). Запрос имеет следующий вид:
db.ИМЯ_КОЛЛЕКЦИИ.find()
В результате выполнения данного запроса все документы коллекции будут отображены не структурировано.
Рассмотрим простой пример:
Выберем БД:
> use projectdb
switched to db projectdb
В данной БД у нас есть одна коллекция:
> show collections
developers
Попробуем получить все документы данной коллекции с помощью метода find()
> db.developers.find()
{ "_id" : ObjectId("580adbcf4ab788eb0072a3e1"), "title" : "Eugene Suleimanov", "specialty" : "Java Developer", "skills" : [ "Java", "Hibernate", "Spring" ] }
Метод pretty()
Для структурированного вывода данных коллекции используется метод pretty().
Данный запрос имеет следующий общий вид:
db.ИМЯ_КОЛЛЕКЦИИ.find().pretty()
В случае с нашей коллекцией developers данный запрос будет выглядеть следующим образом:
> db.developers.find().pretty()
{
"_id" : ObjectId("580adbcf4ab788eb0072a3e1"),
"title" : "Eugene Suleimanov",
"specialty" : "Java Developer",
"skills" : [
"Java",
"Hibernate",
"Spring"
]
}
Для получения документа также предусмотрен метод findOne(), который возвращает только один документ.
Параметризированные запросы
Также, как и в реляционных БД мы можем вводить параметры поиска записей в таблицах, в MongoDB предусмотрена возможность определять условия поиска документа в коллекции.
Для этих целей в MongoDB используются следующие операции:
Операция | Синтаксис | Пример | Эквивалент в реляционной БД |
---|---|---|---|
Равенство | {<key>:<value>} | db.developers.find({“specialty”:”Java”}).pretty() | where specialty = ‘Java’ |
Меньше, чем | {<key>:{$lt:<value>}} | db.developers.find({“salary”:{$lt:1000}}).pretty() | where salary < 1000 |
Меньше, либо равно | {<key>:{$lte:<value>}} | db.developers.find({“salary”:{$lte:1000}}).pretty() | where salary <= 1000 |
Больше, чем | {<key>:{$gt:<value>}} | db.developers.find({“salary”:{$gt:1000}}).pretty() | where salary > 1000 |
Больше, либо равно | {<key>:{$gte:<value>}} | db.developers.find({“salary”:{$gte:1000}}).pretty() | where salary >= 1000 |
Не равно | {<key>:{$ne:<value>}} | db.developers.find({“salary”:{$ne:1000}}).pretty() | where salary != 1000 |
Операция AND
Для комбинирования нескольких условий в запросе используется оператор AND.
Данный запрос имеет следующий общий вид:
>db.ИМЯ_КОЛЛЕКЦИИ.find(
{
$and: [
{ключ1: значение1}, {ключ2:значение2}
]
}
).pretty()
Рассмотрим простой пример, но предварительно добавим несколько записей в нашу коллекцию developers:
> db.developers.insert({title: 'Ivan Ivanov', specialty: 'Java', skills: ['Java', 'Hibernate', 'Spring'], salary: 3000})
WriteResult({ "nInserted" : 1 })
> db.developers.insert({title: 'Nikolai Nikolaev', specialty: 'C++', skills: ['C++', 'STL', 'SQL'], salary: 2500})
WriteResult({ "nInserted" : 1 })
Теперь выберем всех Java разработчиков, у которых зарплата более 2000. Для этого составим следующий запрос:
> db.developers.find( { $and: [ { skills: "Java" }, {salary: { $gte: 2000 }} ] } ).pretty()
{
"_id" : ObjectId("580ae3f74ab788eb0072a3e2"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3000
}
Операция OR
Для выбора документа, который соответствует одному из условий, в MongoDB используется команда $or.
Общий вид данной команда следующий:
>db.ИМЯ_КОЛЛЕКЦИИ.find(
{
$or: [
{ключ1: значение1}, {ключ2:значение2}
]
}
).pretty()
Для понимания того, как это работает на практике, рассмотрим простой пример.
Предположим, что мы хотим выбрать всех разработчиков из нашей коллекции developers, у который зарплата больше, либо равна 3000, или они являются C++ разработчиками.
Для этого нам необходимо составить следующий запрос:
> db.developers.find( { $or: [ {specialty: "C++"}, {salary: { $gte: 3000 }} ] } ).pretty()
{
"_id" : ObjectId("580ae3f74ab788eb0072a3e2"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3000
}
{
"_id" : ObjectId("580ae41a4ab788eb0072a3e3"),
"title" : "Nikolai Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 2500
}
Комбинирование AND и OR
Рассмотрим простой пример, в котором мы попробуем получить всех разработчиков из нашей коллекции developers, у которых специальность зарплата более или равна 2000 и специальность Java либо Java Developer.
Для этого мы можем использовать следующий запрос:
> db.developers.find( {"salary": {$gte: 2000}, $or: [ {"specialty": "Java"}, {"specialty": "Java Developer"} ] } ).pretty()
{
"_id" : ObjectId("580ae3f74ab788eb0072a3e2"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3000
}
На этом мы заканчиваем изучение способов запроса документа из коллекции.
В следующей статье мы рассмотрим, как в MongoDB изменить документ.