如何看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