Общие операции запросов MongoDB

MongoDB

Операция запросов MongoDB может реализовать наиболее распространенные операции запросов реляционных баз данных.В этой статье объясняются распространенные запросы MongoDB.

Перед прочтением этой статьи рекомендуется прочитать«Основные операции по установке и документации MongoDB».

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

Условные операции сравнения размеров

При запросе документов фильтруйте и запрашивайте размер и диапазон условий. Ниже приведены часто используемые операторы сравнения.

оператор иллюстрировать
$eq Запрос документов, равных значению условия, аналогично = в реляционных базах данных.
$ne Запрашивать документы, которые не равны или не существуют со значениями условия, аналогично != в реляционных базах данных.
$gt Запросить документы, превышающие значение условия, аналогично реляционной базе данных >
$gte Запрашивать документы, превышающие или равные значению условия, подобно >= в реляционных базах данных.
$lt Запросить документы, которые меньше условного значения, аналогично реляционной базе данных
$lte Запрашивать документы, меньшие или равные значению условия, подобно
$in Запросите документ значения в данных $in, аналогично входу реляционной базы данных.
$nin В отличие от запроса $in, реляционная база данных, например не в

Поскольку взаимосвязь между использованием больше, меньше и равно аналогична, ее легче понять.Вот пример, иллюстрирующий использование$gteчтобы получить больше или равно150посетитель

db.article.find({"visitor": {$gte:150}})

Результаты:

использовать$in, вы должны использовать массив, чтобы установить значение условия, например, получить посетителя как70а также150значение

db.article.find({"visitor": {$in:[70, 150]}})

Результаты:

логический оператор

В запросе с несколькими условиями условие и символ соединения условия называются логическими операторами. Общие операторы:

оператор иллюстрировать
$and Указывает, что все условия соблюдены одновременно
$nor а также$andИ наоборот, верно, когда не соблюдены все условия
$or пока выполняется одно условие
$not Указывает, что поле существует и не удовлетворяет условиям

$andЗапросauthor=ytaoа такжеvisitor=150документация

db.article.find(
    {$and:[
      {"author":{$eq:"ytao"}},
      {"visitor":{$eq:150}}
    ]}
)

$norзапрос неauthor=ytaoи неvisitor=170документация

db.article.find(
    {$nor:[
      {"author":{$eq:"ytao"}},
      {"visitor":{$eq:170}}
    ]}
)

$orЗапросauthor=ytaoилиvisitor=170документация

db.article.find(
    {$or:[
      {"author":{$eq:"ytao"}},
      {"visitor":{$eq:170}}
    ]}
)

$notзапрос неauthor=ytaoдокументация

db.article.find(
    {"author":{$not:{$eq:"ytao"}}}
)

оператор элемента

Операторы над элементами поля называются операторами элемента.

оператор иллюстрировать
$exists Определить, существует ли поле в документе,trueсуществовать,falseне существовать
$type Фильтрация документов по заданному типу поля

$existsЗапросauthorСуществующее поле в документе

db.article.find(
    {"author":{$exists:true}}
)

$typeЗапросauthorДокументы, поля которых являются массивами

db.article.find(
    {"author":{$type:"array"}}
)

регулярное выражение

MongoDB поддерживает регулярные выражения для сопоставления документов. С помощью регулярных выражений мы можем реализовать нечеткие запросы к реляционным базам данных и более мощные правила сопоставления. Существует три синтаксиса:

{ < field >: { $regex: /pattern/, $ options : '<options>' } }
{ < field >: { $regex: 'pattern', $ options : '<options>' } }
{ < field >: { $regex: /pattern/<options> } }

параметр/pattern/а также'pattern'Оба представляют собой регулярные выражения, и прямое добавление строк может использоваться для запутывания запросов. параметр$optionsДля необязательных параметров есть четыре варианта с фиксированными значениями.

варианты варианты иллюстрировать
i Процесс сопоставления игнорирует регистр
x Пробел игнорируется при сопоставлении
m Соответствие нескольким строкам данных, но с начала и конца каждой строки
s После преобразования линий с несколькими спичками в одну строку быть новой строкой\nнить

нечеткий запросauthorдляTaoПример:

db.article.find(
    {"author":{$regex:/Tao/, $options:'i'}}
)

результат поиска

Как видно из приведенных выше результатов запроса, формат данных также может быть сопоставлен.

Работа полимеризации

Операция агрегирования может быть пакетной, сортированной, пейджинговой, запросом, связанным с несколькими эпизодами, и т. д. с использованием грамматического формата:

db.collection.aggregate([
    {聚合操作一},
    {聚合操作二}
])

Условный фильтр

$matchОн используется для условной фильтрации, и для запроса могут использоваться некоторые условные ограничения.

Формат синтаксиса:

db.article.aggregate([
    { $match: <条件> }
])

Запросauthor = ytaoа такжеvisitor > 100документация

db.article.aggregate([
    { $match: {
        $and: [
            {"author": {$eq: "ytao"}},
            {"visitor": {$gt: 100}}
        ]} 
    }
])

групповая операция

$groupэто оператор группировки, аналогичный тому, что используется в реляционных базах данных.group byработать. Его синтаксический формат:

db.collection.aggregate([
    {
        $group:{
            "_id":"$<分组字段名>", 
            <显示结果的字段名称>:{<运算符>:"$<运算符计算的字段名>"}
        }
    }
])

где операторы следующие:

оператор иллюстрировать
$avg Среднее значение текущей группы
$sum сумма текущей группы
$min Минимальное значение текущей группы
$max Максимальное значение текущей группы
$first Значение первого из текущей группы
$last последнее значение текущей группы
$push Отображает указанное текущее значение поля группы в виде массива
$addToSet Отображает уникальные значения указанного поля текущей группы в виде массива

сгруппировать каждыйauthorизvisitorпример среднего

db.article.aggregate([
    {
        $group:{
            "_id":"$author", 
            "avg_visitor":{$sum:"$visitor"}
        }
    }
])

поле дисплея

Поле, возвращаемое после указания запроса, использует **$project**, а значение по умолчанию для спецификации поля равно0,но_idПо умолчанию1, показывая, что указанный синтаксис поля:

db.collection.aggregate([
    {
        $project:{
            "<字段名>": <0或1>, 
            "<字段名>":<0或1>
        }
    }
])

экспонатtitleа такжеvisitorПример поля:

db.article.aggregate([
    {
        $project:{
            "_id": 0, 
            "title": 1,
            "visitor": 1
        }
    }
])

в то же время,$projectтакже соответствуют$split(разделение струны),$substr(усеченная строка),$concat(объединить строки),$switch(условное суждение),$toLower(переводится в нижний регистр),$toUpper(преобразуется в верхний регистр), обработка формата времени и другие операторы для работы, синтаксис:

db.collection.aggregate([
    {
        $project:{
            "<字段名>": {<操作符>: <条件>}, 
            "<字段名>": {<操作符>: <条件>},
        }
    }
])

Например, будетtitleБуквы в конвертируются в верхний регистр

db.article.aggregate([
    {
        $project:{
            "titleField":{ $toUpper:"$title" }
        }
    }
])

вернуть результат

Сортировка

**sort**是文档排序操作符,类似关系型数据中的`order by`指令。`sort排序用1-1` указывает на положительный и обратный порядок.

Формат синтаксиса:

db.collection.aggregate([
    {
        $sort:{
            "<排序字段名>": <1 或 -1>
        }
    }
])

согласно сvisitorИмена полей сортируются в обратном порядке:

db.article.aggregate([
    {
        $sort:{
            "visitor": -1
        }
    }
])

Сортировать результаты

пейджинговая операция

использование пагинацииskip** 和 **limitВыполнение операций постраничного просмотра.$skipпредставляет количество пропущенных документов,$limitУказывает количество возвращенных документов, используемых этими двумя командами, подобно тому, как это делается в реляционных данных.limit <start>, <size>пейджинговые операции.

Формат синтаксиса:

db.collection.aggregate([
    {$skip: <跳过的文档数量>},
    {$limit: <返回的文档数量>}
])

Запросите два примера данных на второй странице:

db.article.aggregate([
    {$skip: 2},
    {$limit: 2}
])

вернуть результат

Подсчитайте количество документов

$countОн используется для подсчета количества документов и выполнения условной фильтрации.

Формат синтаксиса:

db.collection.aggregate([
    { $count: "<显示数量的字段的名称>" }
])

Подсчитайте количество всех документов:

db.article.aggregate([
    { $count: "数量" }
])

статистические результаты:

Запрос ассоциации с несколькими коллекциями

$lookupОн используется для Multi-Set Association Query, аналогично присоединению таблицы в реляционной базе данных.

Используйте синтаксис:

db.collection.aggregate([
    { 
        $lookup: {
            from: <关联的表名>,
            localField: <当前表的关联字段>,
            foreignField: <关联表的关联字段>,
            as: <另一集合嵌入的字段名>
        }
    }
])

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

Запросage = 18Коллекция:

db.article.aggregate([
    { 
        $lookup: {
            from: "person",
            localField: "author",
            foreignField: "author",
            as: "person_info"
        }
    },
    {
       $match:{
           "person_info.age": {$eq: 18}
       }
    }
])

Возвращаемый результат:

Суммировать

После понимания общих операций по запросу MongoDB вы можете обнаружить, что она и операция реляционных данных имеет много похожих операционных идей. Для этих операций относительно гибкие, обеспечивающие API также более мощные, почти могут удовлетворить большинство требований поиска большинства сценариев использования. Мастер Эти запросы Операции могут более эффективно получать документы в MongoDB.

Рекомендуемое чтение

Основные операции по установке и документации MongoDB

«Внедрение балансировки нагрузки Dubbo»

«Вы должны знать динамический прокси JDK и динамический прокси CGLIB»

«Потоки новых функций Redis5 для очередей сообщений»