2016-09-21 64 views
0

你好OrientDB的追随者,2.1语法不适用于2.2。通过母类更新儿童记录

我有一个问题,已经占用了我的时间比我想花的更多。

在2.1,我通过父类的更新能够更新从单一的命令父记录和子记录或刚子记录。但是,在0122中的,它不起作用 ..我在这两种语言中都使用了相同的确切语法。

看看下面的样本数据集

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" 
     }] 

可以说,我们刚插入的设备类记录结束了一个摆脱了#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的发行说明和更改,找不到任何对此的引用。

我发现了一个bug,还是我忽略了2.2版发布后东方架构中发生了变化的东西。

最后一点,我已经在2.2以上的不同服务器和部署上试过了这个版本。所有人都有相同的行为。

任何关于此事的指导都将得到真正的赞赏。

感谢,

+0

我测试了两个受影响版本上的查询并重现了该问题,并将替代查询作为解决方法。 –

+0

你可以为这个错误打开一个问题吗? –

+0

是的。谢谢,如果你找到解决办法。请让我知道,会非常感激。今天将提交这个bug。 – OpsEngineer

回答

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") 

希望它可以帮助

Regards

0

作为解决方法,您可以使用SQL BATCH

我用你的结构 enter image description here

我用这个SQL批处理命令

begin 
let $a= update users set username="johndoethesenior" return after [email protected] where username="johndoe" 
let $b = update $a.value set name="Note 8" return after [email protected] 
commit 
return [$a.size(),$b.size()] 

enter code here

和我

enter image description here

希望它有帮助。