どうUPSERT
コマンドを見て、とだけそれにUPDATE
ためのコマンドと何のINSERT
一部のための指示を与える程度。そうすれば、それが存在しなければ実行されます。ここ
https://docs.arangodb.com/3.0.10/AQL/Operations/Upsert.html
それが使用されている例である:
UPSERT {
username: @username
}
INSERT {
username: @username,
fullname: @fullname,
verified: false
}
UPDATE {
}
IN Users
RETURN {
user: NEW
}
UPSERT
コマンドは3つのセクションを有しています。
最初はコンパイラで、ドキュメントが存在するかどうかを識別する方法です。この場合、比較者は{ username: @username }
です。これを使用してUsers
コレクションを検索し、一致するかどうかを確認します。
一致するものがなければ、INSERT
コマンドを実行します。
一致するものがある場合は、UPDATE
コマンドを実行します。
この場合、UPDATE
コマンドでは何も提供されていないため、何も提供されていないため、何も更新されません。存在しない場合にのみ挿入されます。
ブロックブロックには、レコードが見つからない場合に挿入するキー/値が表示されます。
この場合、作成されたばかりの新規ユーザーが検証されないため、false
にも設定が検証されます。このフラグをtrue
に変換するのは、アプリ内の別のコマンドの責任です。
RETURN
のエントリにも注意してください。それはNEW
を参照し、必要に応じてOLD
というものを参照することもできます。
これらは、UPSERT
コマンドによって提供される内部戻り値であり、参照された2つのバージョンのドキュメントを参照します。
NEW
は、更新が行われたかどうかにかかわらず、常に最新のバージョンのドキュメントが格納されます。
OLD
には、新しい値で更新される前の古いバージョンのドキュメントが含まれています。ドキュメントが更新されていない場合はnullを返します。この場合、更新が行われないため常にnullになります。
はい、これは他のデータベース言語のIF NOT EXISTS
スタイルコマンドとまったく同じように実行されます。コンパレータが一致しない場合は、新しいレコードを挿入します。コンパレータが一致する場合は、何もしません。
私はそれが助けてくれることを願っています!
サンプルクエリを作成することは可能ですか?オプションなしでは、私にとってはうまくいきません。 – ich
ありがとう、私のreputatoinは低いupvoteにです:)私はそれを作ることができるとき、私はやります – ich