看看UPSERT
命令怎么样,只给它INSERT
部分命令的说明,而不给UPDATE
. 这样它只会在它不存在时执行。
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,因此在这种情况下,它始终为 null,因为不会发生更新。
是的,这完全像IF NOT EXISTS
其他数据库语言中的样式命令一样执行。如果比较器不匹配,则插入新记录,如果比较器匹配,则不执行任何操作!
我希望这会有所帮助!