22.3.3.4 Изменение документов
Вы можете использовать метод modify() для обновления одного или нескольких документов в коллекции. API 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 Reference Manual содержатся инструкции по поиску и изменению значений JSON.
Смотрите для полного определения синтаксиса.
© 2025 Oracle
Licensed under the GPLv2 License.