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 值的指南。
-
查看 CollectionModifyFunction 以获取完整的语法定义。