22.3.3.4 Изменение документов
Вы можете использовать метод modify() для обновления одного или нескольких документов в коллекции. X DevAPI предоставляет дополнительные методы для использования с методом modify() для:
Установки и снятия полей в документах.
Добавления, вставки и удаления массивов.
Связывания, ограничения и сортировки изменяемых документов.
Установка и снятие полей документов
Метод modify() работает путем фильтрации коллекции, чтобы включить только изменяемые документы, а затем применения к ним указанных операций.
В следующем примере метод modify() использует условие поиска для определения документа для изменения, а затем метод set() заменяет два значения внутри вложенного объекта demographics.
mysql-js> db.countryinfo.modify("Code = 'SEA'").set(
"demographics", {"LifeExpectancy": 78, "Population": 28})
После изменения документа используйте метод find() для проверки изменения.
Чтобы удалить содержимое из документа, используйте методы modify() и unset(). Например, следующий запрос удаляет GNP из документа, соответствующего условию поиска.
mysql-js> db.countryinfo.modify("Name = 'Sealand'").unset("GNP")
Используйте метод find() для проверки изменения.
mysql-js> db.countryinfo.find("Name = 'Sealand'")
{
"_id": "00005e2ff4af00000000000000f4",
"Name": "Sealand",
"Code:": "SEA",
"IndepYear": 1967,
"geography": {
"Region": "British Islands",
"Continent": "Europe",
"SurfaceArea": 193
},
"government": {
"HeadOfState": "Michael Bates",
"GovernmentForm": "Monarchy"
},
"demographics": {
"Population": 27,
"LifeExpectancy": 79
}
}
Добавление, вставка и удаление массивов
Чтобы добавить элемент в массив, вставить или удалить элементы в массиве, используйте методы arrayAppend(), arrayInsert() или arrayDelete(). Следующие примеры изменяют коллекцию countryinfo для отслеживания международных аэропортов.
В первом примере используются методы modify() и set() для создания нового поля Airports во всех документах.
Будьте внимательны при изменении документов без указания условия поиска; это приведет к изменению всех документов в коллекции.
mysql-js> db.countryinfo.modify("true").set("Airports", [])
После добавления поля Airports, следующий пример использует метод arrayAppend() для добавления нового аэропорта в один из документов. $.Airports в следующем примере представляет поле Airports текущего документа.
mysql-js> db.countryinfo.modify("Name = 'France'").arrayAppend("$.Airports", "ORY")
Используйте find(), чтобы увидеть изменения.
mysql-js> db.countryinfo.find("Name = 'France'")
{
"GNP": 1424285,
"_id": "00005de917d80000000000000048",
"Code": "FRA",
"Name": "France",
"Airports": [
"ORY"
],
"IndepYear": 843,
"geography": {
"Region": "Western Europe",
"Continent": "Europe",
"SurfaceArea": 551500
},
"government": {
"HeadOfState": "Jacques Chirac",
"GovernmentForm": "Republic"
},
"demographics": {
"Population": 59225700,
"LifeExpectancy": 78.80000305175781
}
}
Чтобы вставить элемент в другое место в массиве, используйте метод arrayInsert() для указания индекса вставки в выражении пути. В этом случае индекс равен 0, или первый элемент в массиве.
mysql-js> db.countryinfo.modify("Name = 'France'").arrayInsert("$.Airports[0]", "CDG")
Чтобы удалить элемент из массива, вы должны передать методу arrayDelete() индекс удаляемого элемента.
mysql-js> db.countryinfo.modify("Name = 'France'").arrayDelete("$.Airports[1]")
Связанная информация
В Справочнике по MySQL содержатся инструкции по поиску и изменению значений JSON.
См. для полного определения синтаксиса.
© 2025 Oracle
Licensed under the GPLv2 License.