MATCH语句中可以传递值么

MATCH (n) where id(n) == hash(‘113913012347211776’) return n.wcc

MATCH (v:wcc{value:-10805534131917535}) -[e:tolead|toorder|tovin|tolog]- (p) RETURN v,e,p;

可以,你去看下文档的 WITH 语法:WITH - NebulaGraph Database 手册

MATCH (n) where id(n) == hash(‘113913012347211776’) with n.wcc.value as wcc_value
MATCH (v) where v.wcc.value == wcc_value return v
我使用了with将第一个模式的wcc的属性值作为查询条件传给了下一个match,而且wcc这个属性我也建立了索引,但是用where查询超时了,是语法的问题么,能不能将第一个match的结果传递到第二个match的模式匹配的语句中–MATCH (v:wcc{value:wcc_value}),类似这样的

你现在这样写和MATCH (v:wcc{value:wcc_value})没有区别,效果是一样的。

profile 提供下,另外,版本也提供下

result.csv (6.9 KB)
版本是3.6.0

如果我写MATCH (v:wcc{value:wcc_value})这样的话会报错

如果我直接把值写进去是没问题的

你试试把 n.wcc.value 用 properties(n).value ad wcc_value 看看。

这个改了报的错还是一样,是不是后面引用这个wcc_value出现的问题

MATCH (v:wcc{value:-10805534131917535}) return v
MATCH (v) where v.wcc.value == -10805534131917535 return v
上面这两句话应该是同一个意思吧,不过用where的执行时间会慢很多

wcc 创建过索引么

建了索引

你可以看下二者执行计划的对比,看下哪里耗时有差异,在语句前面加个 profile 就可以得到执行计划了。

看执行计划应该是两个的过滤条件有区别



用where的话后面多了很多条件

好像是一个走了索引,一个没有。

那是我这边建的索引有问题么,还是说用where的话还需要别的什么条件才能使用索引;
另外之前那个传递值的问题也还没有解决,有什么其他建议么

你的索引是不是 wcc 的,而不是 wcc.value 的。我之前做过一个测试,你可以看下这个回复:索引创建的疑问 - #2,来自 steam

我这应该是对wcc.value创建的吧

嗯,你试试 match n 改成 match (n:wcc) 看看。可能速度会提升下

感谢回答!速度确实快了,而且用where做值传递查询也可以实现了


但是将第二行改成match (v:wcc{value:wcc_value}) return v 去传wcc_value的值还是不行,可能是语法上不允许。

2 个赞

对对,我的意思是,你不能把 with 当作一个确定值来写在 match 点里,得用 where

1 个赞

明白了,非常感谢!!!