22.4.3.4 Изменение документов
Вы можете использовать метод modify() для обновления одного или нескольких документов в коллекции. X DevAPI предоставляет дополнительные методы для использования с методом modify() для:
Установки и снятия полей в документах.
Добавления, вставки и удаления массивов.
Связывания, ограничения и сортировки изменяемых документов.
Установка и снятие полей документов
Метод modify() работает, фильтруя коллекцию, чтобы включить только изменяемые документы, а затем применяет заданные операции к этим документам.
В следующем примере, метод modify() использует условие поиска для определения документа, который нужно изменить, а затем метод set() заменяет два значения в вложенном объекте demographics.
mysql-py> db.countryinfo.modify("Code = 'SEA'").set(
"demographics", {"LifeExpectancy": 78, "Population": 28})
После изменения документа, используйте метод find() для проверки изменения.
Для удаления содержимого из документа, используйте методы modify() и unset(). Например, следующий запрос удаляет GNP из документа, соответствующего условию поиска.
mysql-py> db.countryinfo.modify("Name = 'Sealand'").unset("GNP")
Используйте метод find() для проверки изменения.
mysql-py> 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
}
}
Добавление, вставка и удаление массивов
Для добавления элемента в поле массива, или вставки, или удаления элементов в массиве, используйте методы array_append(), array_insert() или array_delete(). Следующие примеры изменяют коллекцию countryinfo для отслеживания международных аэропортов.
В первом примере используются методы modify() и set() для создания нового поля Airports во всех документах.
Будьте осторожны при изменении документов без указания условия поиска; это изменяет все документы в коллекции.
mysql-py> db.countryinfo.modify("true").set("Airports", [])
После добавления поля Airports, следующий пример использует метод array_append() для добавления нового аэропорта в один из документов. $.Airports в следующем примере представляет поле Airports текущего документа.
mysql-py> db.countryinfo.modify("Name = 'France'").array_append("$.Airports", "ORY")
Используйте find(), чтобы увидеть изменения.
mysql-py> 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
}
}
Для вставки элемента в другую позицию в массиве, используйте метод array_insert() для указания индекса для вставки в выражении пути. В этом случае индекс равен 0, или первый элемент в массиве.
mysql-py> db.countryinfo.modify("Name = 'France'").array_insert("$.Airports[0]", "CDG")
Для удаления элемента из массива, вы должны передать методу array_delete() индекс удаляемого элемента.
mysql-py> db.countryinfo.modify("Name = 'France'").array_delete("$.Airports[1]")
Связанная информация
В Руководстве по MySQL приведены инструкции по поиску и изменению значений JSON.
См. для полного определения синтаксиса.
© 2025 Oracle
Licensed under the GPLv2 License.