UPSERTを使用してarangodbに複数の行を挿入するにはどうすればよいですか?コレクションには、重複するドキュメントの挿入を防ぐ一意のインデックスが含まれています。複数の挿入は一意のインデックスがなくても正常に機能しますが、一意のインデックスを持つ複数の挿入で更新/置換を処理するにはどうすればよいですか?
このような:
INSERT [{doc1},{doc2},{doc3}]
IN collection
UPDATE {} // when duplicate per document
アップデート1
SQLは次のようになります。
INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)
ON DUPLICATE KEY UPDATE name=`value`
ありがとう。
ArangoDBはUPSERT操作をサポートしています:https://docs.arangodb.com/3.3/AQL/Operations/Upsert.html
ArangoDBのドキュメントから:
アップサート操作のUPDATEバリアントを使用すると、見つかったドキュメントが部分的に更新されます。つまり、updateExpressionで指定された属性のみが更新または追加されます。upsertのREPLACEバリアントを使用する場合、既存のドキュメントはupdateExpressionのコンテキストに置き換えられます。
UPSERTを使用して、次のように複数のレコードを更新/置換/挿入できます。
最初にcollection
、name
属性の一意のハッシュインデックスを使用して、いくつかのサンプルドキュメントを挿入してみましょう。
FOR doc in [
{ "name": "Doc 1", "value": 1 },
{ "name": "Doc 2", "value": 1 },
{ "name": "Doc 3", "value": 1 }]
INSERT doc IN collection
これで、バッチアップサートを実行する場合は、次のAQLを実行できます。
FOR doc in [
{ "name": "Doc 2", "value": 2 },
{ "name": "Doc 3", "value": 2 },
{ "name": "Doc 4", "value": 1 }
]
UPSERT { "name": doc.name }
INSERT doc
UPDATE { "value": doc.value } in collection
上記のAQLクエリは、1つの新しいDoc 4
ドキュメントを挿入し、Doc 2
との値属性を更新しますDoc 3
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加