您可以使用 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 值的指示。
請參閱 CollectionModifyFunction,以取得完整的語法定義。