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

Для запроса документов MongoDB используйтеfind() и、findOne()методы.

Метод find() отображает все документы в неструктурированном формате.

Синтаксис

Формат синтаксиса запроса данных в MongoDB выглядит следующим образом:

db.collection.find(query, projection)
  • query: Критерии запроса, используемые для поиска документов. По умолчанию{}, что соответствует всем документам.
  • projection(Необязательно): Указывает поля для включения или исключения в возвращаемых результатах.

Найти все документы:

Пример

db.myCollection.find();

Поиск документов по критериям:

Пример

db.myCollection.find({ age: { $gt: 25 } });

Поиск документов по критериям и возврат только указанных полей:

Пример

db.myCollection.find(
    { age: { $gt: 25 } },
    { name: 1, age: 1, _id: 0 }
);

Если вам нужно прочитать данные в удобочитаемом формате, вы можете использовать метод pretty(). Формат синтаксиса следующий:

>db.col.find().pretty()

Метод pretty() отображает все документы в отформатированном виде.

Пример

db.col.find().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":

Пример

db.myCollection.find({
    $and: [
        { age: { $gt: 25 } },
        { city: "Нью-Йорк" }
    ]
});

3. Использование регулярных выражений

Регулярные выражения можно использовать для запросов сопоставления с образцом.

Найдите документы, где name начинается с "A":

db.myCollection.find({ name: /^A/ });

4. Проекция

Проекция используется для управления тем, какие поля возвращаются в результатах запроса. Можно использовать либо режим включения, либо режим исключения.

Возвращать только поля name и age:

Пример

db.myCollection.find(
    { 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 документов.

Пример

db.myCollection.find(
    {
        $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
}
Другие расширения