Запрос документов MongoDB
Для запроса документов MongoDB используйтеfind() и、findOne()методы.
Метод find() отображает все документы в неструктурированном формате.
Синтаксис
Формат синтаксиса запроса данных в MongoDB выглядит следующим образом:
db.collection.find(query, projection)
- query: Критерии запроса, используемые для поиска документов. По умолчанию
{}, что соответствует всем документам. - projection(Необязательно): Указывает поля для включения или исключения в возвращаемых результатах.
Найти все документы:
Пример
Поиск документов по критериям:
Пример
Поиск документов по критериям и возврат только указанных полей:
Пример
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);
Если вам нужно прочитать данные в удобочитаемом формате, вы можете использовать метод pretty(). Формат синтаксиса следующий:
>db.col.find().pretty()
Метод pretty() отображает все документы в отформатированном виде.
Пример
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB Tutorial",
"description" : "MongoDB is a NoSQL database",
"by" : "Example Tutorial",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
2. findOne()
Метод findOne() используется для поиска одного документа в коллекции. Если найдено несколько подходящих документов, он возвращает только первый из них.
Синтаксис:
db.collection.findOne(query, projection)
- query: Критерии запроса, используемые для поиска документов. По умолчанию
{}, что соответствует всем документам. - projection(Необязательно): Указывает поля для включения или исключения в возвращаемых результатах.
Найти один документ:
db.myCollection.findOne({ name: "Alice" });Найти один документ и вернуть только указанные поля:
db.myCollection.findOne(
{ name: "Alice" },
{ name: 1, age: 1, _id: 0 }
);
Расширенные методы запросов
1. Использование операторов сравнения
MongoDB поддерживает различные операторы сравнения, такие как$gt, $lt, $gte, $lte, $eq, $neи т. д.
Найти документы, где age больше 25:
db.myCollection.find({ age: { $gt: 25 } });
2. Использование логических операторов
MongoDB поддерживает различные логические операторы, такие как$and、$or、$not、$norи т. д.
Найдите документы, где age больше 25 и city равно "New York":
Пример
$and: [
{ age: { $gt: 25 } },
{ city: "Нью-Йорк" }
]
});
3. Использование регулярных выражений
Регулярные выражения можно использовать для запросов сопоставления с образцом.
Найдите документы, где name начинается с "A":
db.myCollection.find({ name: /^A/ });
4. Проекция
Проекция используется для управления тем, какие поля возвращаются в результатах запроса. Можно использовать либо режим включения, либо режим исключения.
Возвращать только поля name и age:
Пример
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);
5. Сортировка
Можно сортировать результаты запроса.
Сортировать по age в порядке убывания:
db.myCollection.find().sort({ age: -1 });
6. Limit и Skip
Вы можете ограничить результаты запроса и пропустить указанное количество документов.
Вернуть первые 10 документов:
db.myCollection.find().limit(10);
Пропустить первые 5 документов и вернуть следующие 10 документов:
db.myCollection.find().skip(5).limit(10);
Пример
Найти документы, в которых age больше 25 и city равно "New York", вернуть только поля name и age, отсортировать по age в порядке убывания и вернуть первые 10 документов.
Пример
{
$and: [
{ age: { $gt: 25 } },
{ city: "Нью-Йорк" }
]
},
{ name: 1, age: 1, _id: 0 }
).sort({ age: -1 }).limit(10);
Сравнение предложения WHERE в MongoDB и RDBMS
Если вы знакомы с традиционными SQL-данными, вы сможете лучше понять условные операторы запросов MongoDB с помощью следующей таблицы:
| Действие | Формат | Пример | Аналогичный оператор в RDBMS |
|---|---|---|---|
| Равно | {<key>:<value>} |
db.col.find({"by":"Example"}).pretty() |
where by = 'Example' |
| Меньше | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
| Меньше или равно | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
| Больше | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
| Больше или равно | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
| Не равно | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
Условия AND в MongoDB
Метод find() в MongoDB может принимать несколько ключей, разделённых запятыми, что является условием AND в традиционном SQL.
Формат синтаксиса следующий:
>db.col.find({key1:value1, key2:value2}).pretty()
Пример
В следующем примере используются ключиbyиtitleдля запросаПример руководстваСреднийУчебник по MongoDBданные
> db.col.find({"by":"Example", "title":"MongoDB 教程"}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Example",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
Приведенный выше пример аналогичен выражению WHERE:WHERE by='Example Tutorial' AND title='MongoDB Tutorial'
Условия OR в MongoDB
В операторах условий OR MongoDB используется ключевое слово$or, синтаксис следующий:
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
Пример
В следующем примере мы демонстрируем запрос ключаbyсо значением Example Tutorial или ключаtitleсо значениемMongoDB Tutorialдокументов.
>db.col.find({$or:[{"by":"Example"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Example",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
Комбинирование AND и OR
В следующем примере демонстрируется совместное использование AND и OR, аналогично обычному выражению SQL:'where likes>50 AND (by = 'Example Tutorial' OR title = 'MongoDB Tutorial')'
>db.col.find({"likes": {$gt:50}, $or: [{"by": "Example"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Example",
"url" : "http://www.example.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
Другие расширения