Orientdb 尝试从一个类更新/向上插入到另一个类

Orientdb 尝试从一个类更新/向上插入到另一个类,orientdb,orientdb2.2,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) CREA

以下内容可用于创建场景

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')
这些是以下select查询的结果

从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中一样添加另外两个记录。下面是一个javascript函数

初始场景:

JS功能:

结果:

因此,为了澄清,您希望在最后得到包含b v d e h i的v2?v2需要包含3条记录v2需要包含3条记录。记录1 a、b、z、记录2 d、e、f、记录3 h、i、jrecord 1已经存在于v2中,只是更新了p1和p2属性,并且记录2和3被创建为新的,因为p1属性上的v2索引没有找到。好的,我认为使用简单的查询是不可能的。也许带着一个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();
}