您好OrientDB粉丝,
我遇到的问题比我想花费更多的时间。
在2.1中,我能够 通过更新父类 从单个命令更新父记录和子记录,或只更新子记录。但是,2.2中的,它不起作用 ..我在两者中都使用了相同的语法。
采用以下样本数据集
create class Users
create property Users.username
create property Users.password
create class Devices
create property Devices.name
insert into Users (username, password) values('johndoe','randompassword')
update users add Devices = [{
"@type": "d",
"@class": "Devices",
"name": "Note 7"
}]
让我们说我们刚刚插入的Device类记录最终摆脱了#13:0
在版本 2.1 中,我可以执行以下语法,以便更新父记录和子记录。 完美无缺
update users set username = 'johndoethesenior', Devices = [{
"@type": "d",
"@rid": #14:0,
"@version":1,
"@class": "Devices",
"name": "Note 8"
}] where username = 'johndoe'
我的问题存在。在2.1中它完美地运作。但是,2.2中的,即使我没有收到错误并且显示记录已更新,设备记录上的名称也不会从注释7更改为注释8.
父记录的更改确实经过并从johndoe更改为johndoethesenior。
我查看了发布说明和2.1的更改 - > 2.2并且找不到任何对此的引用。
我发现了一个错误,还是我忽略了2.2发布后东方架构发生了变化的事情。
最后请注意,我在不同服务器和部署的至少4个2.2版本上尝试了这一点。所有人都有相同的行为。
对此问题的任何指导都将非常感激。
谢谢,
答案 0 :(得分:0)
随着工作的开展,你可以试试这个简单的JS功能:
var g = orient.getGraph();
var b = g.command("sql","update users set username = '"+newUserName+"' where username = '"+userName+"'");
var c = g.command("sql","update devices set name = '"+newDeviceName+"' where name = '"+deviceName+"'");
这就是你在工作室中调用它的方式:
select newUpdate("new value of class users","value to replace of class users","new value of class devices","value to replace of class devices")
希望有所帮助
此致
答案 1 :(得分:0)
作为一种解决方法,您可以使用SQL BATCH。
我使用了这个sql批处理命令
begin
let $a= update users set username="johndoethesenior" return after $current.Devices.@rid where username="johndoe"
let $b = update $a.value set name="Note 8" return after $current.@rid
commit
return [$a.size(),$b.size()]
我得到了
希望它有所帮助。