MongoDB — простые обновления


Оглавление

  • updateOne()
  • updateMany()
  • Оператор $set
  • Оператор $mul
  • Оператор $inc
  • Операторы $min и $max
  • Оператор $currentDate
  • Оператор $rename
  • Оператор $unset
  • Полезные ссылки

updateOne()

Что это такое?

Это метод MongoDB, который позволяет нам обновлять один документ в коллекции, даже если мы не передаем фильтр, метод будет обновлять только один документ.

Синтаксис

updateOne() может принимать до трех параметров, первые два из которых являются обязательными, это: фильтр; само «обновление»; и в конце параметры для обновления.

Фильтр состоит из условия, чтобы мы могли найти документ, который нужно обновить, в нем мы можем построить проверочное выражение, используя любой из операторов сравнения/логики, рассмотренных ранее.

Обновление» — это поля с новыми данными, которые будут вставлены в документ, мы можем обновить все поля или только одно. Опции — это дополнительные и необязательные настройки, которые мы можем сделать в нашем updateOne(), например, задать правила сравнения строк.

db.<coleção>.updateOne(
  { <filtro> },
  { <update> },
  { <opções> }  # opcional
);
Войдите в полноэкранный режим Выход из полноэкранного режима
db.my-collection.updateOne(
  { name: "Gabriel" },
  { $set: { age: 22 } }  # o operador $set será abordado mais a frente
)
Войдите в полноэкранный режим Выход из полноэкранного режима

назад к началу


updateMany()

Что это такое?

Это метод, который позволяет обновлять несколько документов одновременно, и если мы не используем фильтр, все документы в коллекции будут обновлены.

Синтаксис

Синтаксис updateMany() в точности повторяет синтаксис updateOne(), принимая до трех параметров (фильтр, обновление, опции), причем первые два являются обязательными.

db.<coleção>.updateMany(
  { <filtro> },
  { <update> },
  { <opções> }  # opcional
);
Войдите в полноэкранный режим Выход из полноэкранного режима
db.my-collection.updateMany(
  { sale: true },
  { $mul: { price: Decimal128("0.8") } }  # o operador $mul será abordado mais a frente
)
Войдите в полноэкранный режим Выход из полноэкранного режима

назад к началу


оператор $set

Что это такое?

Это оператор, который изменяет значение одного или нескольких указанных полей. Он может изменять как поля 1-го уровня Документа, так и встроенные поля.

Синтаксис

Поскольку это оператор, его использование должно осуществляться в рамках метода, который его принимает, в данном случае метода update.

Использовать его очень просто, достаточно объявить его, а затем определить поля и их новые значения.

{ $set: { <campo>: <valor>, <campo>: <valor> } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $set: { color: "blue" } }
Войдите в полноэкранный режим Выход из полноэкранного режима

назад к началу


оператор $mul

Что это такое?

Это оператор, который будет МНОГОКРАТНО умножать значение выбранного поля на указанный множитель, и, как можно ожидать, этот оператор будет работать только с числовыми полями

Синтаксис

Синтаксис $mul так же прост, как и синтаксис $set, с той лишь разницей, что иногда нам потребуется выполнить преобразование типа, например, из целого числа в десятичное.

Чтобы выполнить умножение, нам нужно только объявить поле, которое будет изменено, и множитель, если необходимо, нам также нужно выполнить преобразование типа.

{ $mul: { <campo>: <multiplicador>, <campo>: <conversor>(<multiplicador>) } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $mul: { price: 0.8, "sale.percentage": 0.2 } }
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, к которому мы пытаемся применить умножение, не существует, MongoDB автоматически создаст его и присвоит ему значение 0.

назад к началу


оператор $inc

Что это такое?

Это оператор, который увеличивает или уменьшает числовые поля. Декремент, объективно говоря, является «отрицательным инкрементом», то есть мы используем $inc с отрицательным числом.

Синтаксис

Чтобы выполнить инкремент поля, нам нужно только объявить оператор $inc и поле, которое нужно изменить, вместе с желаемым значением.

{ $inc: { <campo>: <valor> } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $inc: { qty: -5, order: 1 } }
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, которое мы пытаемся увеличить, не существует, MongoDB автоматически создаст его и присвоит ему значение, которое мы пытаемся применить, даже если это значение будет отрицательным.

назад к началу


Операторы $min и $max

Что это такое?

Это операторы, которые выполняют сравнение, чтобы затем применить желаемую модификацию.

$min будет применять модификацию только к тем полям, значение которых больше, чем то, которое мы указываем после оператора, проще говоря, $min будет «перетягивать» значение поля вниз.

$max применит модификацию только к тем полям, которые имеют меньшее значение, чем то, которое мы указали после оператора, проще говоря, $max «перетянет» значение поля вверх.

Синтаксис

Хотя эти операторы имеют противоположное поведение, синтаксис для них одинаков.

Сначала мы объявляем оператор $min/$max, затем поле, которое мы хотим изменить, и, наконец, новое значение, которое мы хотим получить.

{ $min: { <campo>: <valor> } }
{ $max: { <campo>: <valor> } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $min: { stamina: 0 } }
{ $max: { maxMana: 4000 } }
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, которое мы пытаемся изменить, не существует, MongoDB автоматически создаст его и присвоит ему значение, которое мы пытаемся применить, даже если это значение будет отрицательным.

назад к началу


оператор $currentDate

Что это такое?

Это оператор, который присваивает текущую дату указанному полю, эта дата может быть двух типов: Date, которая используется по умолчанию; или timestamps.

Синтаксис

Чтобы использовать оператор $currentDate, нам нужно только объявить его, указать, какое поле будет его принимать, и, наконец, передать true в качестве значения поля.

Однако если мы хотим использовать timestamp в качестве формата, нам нужно использовать оператор $type, указав формат timestamp через строку.

{ $currentDate: { <campo>: <formato> } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $currentDate: { lastUpdate: true, canceled: { $type: "timestamp" } } }
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, к которому мы пытаемся применить модификацию даты, не существует, MongoDB автоматически создаст его и присвоит ему текущую дату в указанном формате.»

назад к началу


Оператор $rename

Что это такое?

Это оператор, который позволяет изменить именование полей в одном или нескольких Документах.

Синтаксис

Общий синтаксис соответствует той же структуре, что и операторы, рассмотренные ранее: мы вызываем его, указываем поле, которое нужно изменить, и, наконец, задаем новое значение. Разница лишь в том, что $rename изменит не значение поля, а само поле.

Синтаксис

Сначала мы вызываем оператор $rename, затем объявляем поле, которое нужно переименовать, и, наконец, говорим, каким должно быть новое имя.

{ $rename: { <campo>: <novo nome> } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $rename: { promotion: "sales" } }
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, которое мы пытаемся переименовать, не существует, MongoDB не выдаст ошибку, а просто не внесет никаких изменений.

назад к началу


оператор $unset

Что это такое?

Когда мы хотим удалить поле из одного или нескольких документов, мы используем $unset.

Синтаксис

Мы вызываем оператор $unset, затем поле, которое нужно удалить, и, наконец, передаем пустую строку в качестве значения.

Стоит подчеркнуть, что значение может быть буквально любым, однако в официальной документации приводится пример с пустой строкой.

{ $unset: { <campo>: "" } }
Войдите в полноэкранный режим Выход из полноэкранного режима
{ $unset: { uselessCamp: "" } }
{ $unset: { uselessCamp: "trem" } }  # irá deletar o campo uselessCamp igual
Войдите в полноэкранный режим Выход из полноэкранного режима

Примечание: «Если поле, которое мы пытаемся удалить, не существует, MongoDB не выдаст ошибку, а просто не внесет никаких изменений.

назад к началу


Полезные ссылки

  • updateOne docs
  • updateMany docs
  • Операторы обновления
  • Типы данных MongoDB Mongosh
  • Порядок сравнения для различных данных
  • Фильтры
  • Операторы запросов

назад к началу

Оцените статью
devanswers.ru
Добавить комментарий