2017-05-31 68 views
0

可以用来创建方案试图从一类更新/更新插入到另一个

CREATE CLASS v1 EXTENDS v 
CREATE CLASS v2 EXTENDS v 
CREATE PROPERTY v1.p1 STRING 
CREATE PROPERTY v1.p2 STRING 
CREATE PROPERTY v1.p3 STRING 
CREATE PROPERTY v2.p1 STRING (MANDATORY TRUE) 
CREATE PROPERTY v2.p2 STRING (MANDATORY TRUE) 
CREATE PROPERTY v2.p3 STRING 
CREATE INDEX v2.p1 UNIQUE 
INSERT INTO v1 (p1,p2,p3) VALUES ('a','b','c') 
INSERT INTO v1 (p1,p2,p3) VALUES ('d','e','f') 
INSERT INTO v1 (p1,p2,p3) VALUES ('h','i','j') 
INSERT INTO v2 (p1,p2,p3) VALUES ('a','y','z') 

和这些是以下中选择的查询的结果从

选择下列V1

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#33:0", 
      "@version": 1, 
      "@class": "v1", 
      "p1": "a", 
      "p2": "b", 
      "p3": "c" 
     }, 
     { 
      "@type": "d", 
      "@rid": "#34:0", 
      "@version": 1, 
      "@class": "v1", 
      "p1": "d", 
      "p2": "e", 
      "p3": "f" 
     }, 
     { 
      "@type": "d", 
      "@rid": "#35:0", 
      "@version": 1, 
      "@class": "v1", 
      "p1": "h", 
      "p2": "i", 
      "p3": "j" 
     } 
    ], 
    "notification": "Query executed in 0.011 sec. Returned 3 record(s)" 
} 

选择V2

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#41:0", 
      "@version": 1, 
      "@class": "v2", 
      "p1": "a", 
      "p2": "y", 
      "p3": "z" 
     } 
    ], 
    "notification": "Query executed in 0.013 sec. Returned 1 record(s)" 
} 

我已经尝试了多个sql语句,尝试将v1和v2的字段合并到近两天,但无法找到答案。你可以告诉我要去的地方错了

LET $t = SELECT FROM v1 
UPDATE v2 SET (p1,p2) VALUES ($t.$current.p1, $t.$current.p2) UPSERT WHERE $current.p1 = $t.$current.p1 

期望的结果将是V2有值“A,B,Z”和已添加了额外的两个记录,因为他们在V1

更新当前记录
+0

所以,我只想澄清,你想拥有,在结束,包含“abv”“de”“hi”的v2? –

+0

v2需要包含3条记录 –

+0

v2需要包含3条记录。记录1(a,b,z),记录2(d,e,f),记录3(h,i,j) –

回答

1

这是一个JavaScript功能来做到这一点。

初步方案: enter image description here

JS功能:

var g = orient.getGraph(); 
var v1 = g.command("sql","SELECT FROM v1"); 

for(i=0; i<v1.length; i++){ 
    var check_index = g.command("sql","select from index:v2.p1 where key='"+v1[i].getProperty("p1")+"'"); 
    if(check_index.length>0){ 
    //v1 record already present in v2 index - UPDATE 
    print("#### "+"update "+check_index[0].getProperty("rid").getId()+" set p2='"+v1[i].getProperty("p2")+"'"+" ####"); 
    g.command("sql","update "+check_index[0].getProperty("rid").getId()+" set p2='"+v1[i].getProperty("p2")+"'"); 
    } else { 
    //v1 record not present in v2 index - INSERT 
    print("#### "+"insert into v2 set p1='"+v1[i].getProperty("p1")+"',p2='"+v1[i].getProperty("p2")+"',p3='"+v1[i].getProperty("p3")+"'"+" ####"); 
    g.command("sql","insert into v2 set p1='"+v1[i].getProperty("p1")+"',p2='"+v1[i].getProperty("p2")+"',p3='"+v1[i].getProperty("p3")+"'"); 
    } 
    g.commit(); 
} 

结果: enter image description here

+0

对不起,已经离开了几天,会给这个尝试 –

+0

这是完美的,非常感谢你 –

+0

嗨@JohnBrogan如果这对你有用,你能标记答案是正确的吗?非常感谢你 :-) –