説明
この関数は、JSONドキュメントにデータを挿入または更新し、結果を返します。
構文
JSON_SET(json_doc, path, val[, path, val] ...)
説明
json_doc パラメータはJSONドキュメントを指定するために使用され、path はパスパラメータです。いずれかのパラメータが NULL である場合、または path (指定されている場合)が対象を見つからない場合、NULL を返します。
次の場合にエラーが発生します。
json_docパラメータが有効なJSONドキュメントではありません。pathパラメータが有効なパス式ではありません。pathパラメータに * または ** ワイルドカードが含まれています。
パス値ペア(path-value pair)は、左から右の順序で評価されます。path-valueペアによって生成されたドキュメントは、次のペアを評価するための新しい値として使用されます。
ドキュメント内の既存のパスのpath-valueペアは、既存のドキュメント値を新しい値で上書きします。パスで識別されるオブジェクトが存在しない場合、ドキュメント内にパスが存在しないpath-valueペアは、次のルールに従ってドキュメントに追加されます。
既存のオブジェクトに存在しないメンバー。このメンバーはオブジェクトに追加され、新しい値と関連付けられます。
既存の配列の末尾を超える位置。この場合、新しい値を使用して配列を拡張します。既存の値が配列でない場合、自動的に配列としてラップされ、新しい値を使用して拡張されます。
それ以外の場合、ドキュメント内に存在しないパスのpath-valueペアは無視され、無効となります。
例
obclient> SET @jn = '{ "a": 1, "b": [2, 3]}';
Query OK, 0 rows affected
obclient> SELECT JSON_SET(@jn, '$.a', 10, '$.c', '[true, false]');
+--------------------------------------------------+
| JSON_SET(@jn, '$.a', 10, '$.c', '[true, false]') |
+--------------------------------------------------+
| {"a": 10, "b": [2, 3], "c": "[true, false]"} |
+--------------------------------------------------+
1 row in set