nebula 标签label怎么实现

match (n:A {名称:‘a1’}) match (m:B {名称: ‘b1’}) create n-[r:所属公司]->m return r;
create (n:A:B) return n;
match (n:A) return n match(n:B) return n;
以上是neo4j语法,问下nebula中怎么实现这种查询?

你是指match + create? nGQL现在还不支持哈

match (n:A) return n match(n:B) return n;
这种呢,2.6.1支持么

就是类似neo4j标签的语法, 可以同时查询多个tag打上标签label的数据返回

这个语法有问题吧。3.0现在支持

match (m:A) match(n:B) return m,n;

需求:
已知两个tag,starttag和endtag,需要建立对应的关系
数据为:
starttag vid 1 name 测试
starttag vid 2 name 测试2
endtag vid 12 name 测试3
条件是:
MATCH (v:starttag) WHERE v.starttag.name in [‘测试’,‘测试2’] , return id(v);
MATCH (v:endtag) WHERE v.endtag.name in [‘测试3’,‘测试4’] , return id(v);
如何一条语句查询出来一下结果,返回结果如下
startvid endvid boolean
1 12 true
2 null false
或者返回这样能对应上的vid也可以,不能对应的不创建关系
startvid endvid
1 12

或者说这种Neo4j创建变关系的语法,在nebula怎么实现?批量插入边关系,但是要去查询tag的起始id
UNWIND {batch} as row match (n1:8fc266ca2be74073abea99e87a5fa54e:人物 {名称:row.startName}) , (n2:8fc266ca2be74073abea99e87a5fa54e:组织机构 {名称:row.endName}) merge (n1)-[r:所在公司]->(n2) return count(r) with params {batch=[{endName=远光软件, startName=李某某,李某人}, {endName=远光软件, startName=胡某某}]}

1 个赞

现在还没法在语法层批量插入, 没有unwind insert这样的语法

这种语法nebula怎么实现

你可以写以下你想表达的 cypher 等价语法吗?你的描述有点含糊不清

需求很明确啊,就是我想入边的数据前,把相关tag的id查询出来,一一对应上

MATCH (v:starttag) WHERE v.starttag.name == ‘’测试, return id(v);
MATCH (v:endtag) WHERE v.endtag.name ==“测试2” return id(v);怎么能合并一条语句查询

你说的 “一一对应上” 指的是怎么对应?

MATCH (v:starttag) WHERE v.starttag.name == ‘’测试, return id(v);
MATCH (v:endtag) WHERE v.endtag.name ==“测试2” return id(v) 通过条件查询一一对应上,starttag是开始id,endtag是结束id,得到两个起始id,开始写入边数据

如果对应不上,就查询不到结果,也就是返回的结果是
startvid endvid
1 12
对应的上就全部返回,然后通过返回结果去建立关系

通过返回结果建立关系类似 neo4j 的 match … create 或者 merge 语法,目前 nebula 还不支持,上面有说。
没有理解怎么对应上的,你用 cypher 语法描述下,先不要写 ngql 的语法

我这边需要处理的就是这样的
starttag endtag 都是建立好的节点,然后关系数据进来,是通过starttag的name 和endtag的name去关联的,所以我需要一条语句去查询一一对应上srcid和endid,中途有的情况是,可能endtag的name没有这条数据,那就不需要建立关系,如果两个tag的name 查询独有返回起始id,就建立关系,可nebula里面我没有找到可以同时一条语句查询出来两个tag的id,可能tag的数据量会很大,所以想问下有啥好的办法处理

你说的是这个意思吗?

UNWIND [{startName:"v1",endName:"n2"},{startName:"v2",endName:"n1"}] AS CorrespondenceTable
MATCH (v:start),(n:end) WHERE v.name=CorrespondenceTable.startName and n.name=CorrespondenceTable.endName
CREATE (v)-[:所属公司]->(n)

是的,就是nebula 怎么用这种语法查询

UNWIND [{startName:"v1",endName:"n2"},{startName:"v2",endName:"n1"}] AS CorrespondenceTable
MATCH (v:start),(n:end) WHERE v.start.name==CorrespondenceTable.startName and n.end.name==CorrespondenceTable.endName 
RETURN id(v) AS startId, id(n) AS endId

先用上面的语句 查出对应的 startId 和 endId,然后再用 insert 语句插入边