尝试从一个类更新/ upsert到另一个类

时间:2017-05-31 14:17:28

标签: orientdb orientdb2.2

以下内容可用于创建方案

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中添加另外两个记录

1 个答案:

答案 0 :(得分: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

相关问题