modify()
メソッドを使用して、コレクション内の 1 つ以上のドキュメントを更新できます。 X DevAPI には、modify()
メソッドとともに使用して次の操作を行うための追加メソッドが用意されています:
ドキュメント内のフィールドを設定および設定解除します。
配列を追加、挿入および削除します。
変更するドキュメントをバインド、制限およびソートします。
modify()
メソッドは、コレクションをフィルタ処理して変更するドキュメントのみを含め、指定した操作をそれらのドキュメントに適用することで機能します。
次の例では、modify()
メソッドは検索条件を使用して変更するドキュメントを識別し、ネストされたデモグラフィックオブジェクト内の 2 つの値を 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()
メソッドを使用して、すべてのドキュメントに新しい空港フィールドを作成します。
検索条件を指定せずにドキュメントを変更する場合は注意してください。変更すると、コレクション内のすべてのドキュメントが変更されます。
mysql-py> db.countryinfo.modify("true").set("Airports", [])
空港フィールドが追加された状態で、次の例では、array_append()
メソッドを使用して新しい空港をいずれかのドキュメントに追加します。次の例の $.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 Reference Manual には、JSON 値の検索および変更に役立つ手順が用意されています。
完全な構文の定義は、CollectionModifyFunction を参照してください。