如何看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
命令有三個部分到它。
第一個是比較器,它是如何識別文檔是否存在。在這種情況下,比較器是{ username: @username }
。它使用它來搜索Users
集合以查看是否匹配。
如果不匹配,則執行INSERT
命令。
如果匹配,則執行UPDATE
命令。
在這種情況下,我們一直很棘手,並沒有提供任何關於UPDATE
命令的內容,所以它不會更新任何內容,只會在不存在的情況下插入。
INSERT
塊將顯示未找到記錄時插入的鍵/值。
在這種情況下,它也會被設置驗證爲false
,因爲任何剛剛創建的新用戶都未驗證。這將是應用程序中另一個命令的責任,將此標誌轉換爲true
。
另請注意RETURN
條目,它引用NEW
,如果需要,還可以引用一個名爲OLD
的東西。
這些是由UPSERT
命令提供的內部返回值,它們引用了被引用的文檔的兩個版本。
NEW
總是被填充,它包含文檔的最新版本,無論是否進行了更新。
OLD
包含文檔的舊版本,然後用新值更新。如果文檔沒有更新,那麼它會返回null,所以在這種情況下,它會一直爲空,因爲更新不會發生。
是的,這完全按照其他數據庫語言中的IF NOT EXISTS
樣式命令執行。如果比較器不匹配,它會插入新記錄,如果比較器匹配,它什麼都不做!
我希望有幫助!
是否有可能,您可以創建示例查詢。它沒有爲我工作,沒有選項。 – ich
謝謝,我的聲譽是低,upvote :)當我可以做到這一點,我會做 – ich