您可以使用该modify()
方法更新集合中的一个或多个文档。X DevAPI 提供了与该方法一起使用的其他modify()
方法:
设置和取消设置文档中的字段。
添加、插入和删除数组。
对要修改的文档进行绑定、限制和排序。
该modify()
方法的工作原理是过滤集合以仅包含要修改的文档,然后将您指定的操作应用于这些文档。
在以下示例中,该modify()
方法使用搜索条件来标识要更改的文档,然后该set()
方法替换嵌套人口统计对象中的两个值。
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 值的说明 。
有关完整语法定义,请参阅CollectionModifyFunction 。