我对如何正确使用OPTIONAL MATCH很困惑。使用前面报道的相同例子(enter link description here),我想从mol25开始遍历其支架并返回任选地连接其他分子。
MATCH path=(:Molecule {Name: 'mol25'}) -[:hasSubstructure*1..3]- (s:Scaffold)
OPTIONAL MATCH (s) <-[:hasSubstructure]- (:Molecule)
WHERE s.Num_Rings > 1
RETURN path
虽然支架-1796602943(左上)是mol26的亚结构,但是mol26不返回。我本来期望OPTIONAL MATCH(s)&lt; - [:hasSubstructure] - (:Molecule)返回它。
当在OPTIONAL MATCH之前使用WITH时,我得到所有分子都带有任何支架s,但支架层次结构仅限于第一个邻居,这是预期的行为。
MATCH (:Molecule {Name: 'mol25'}) -[:hasSubstructure*1..3]- (s:Scaffold)
WITH s
OPTIONAL MATCH p=(s) <-[:hasSubstructure]- (:Molecule)
RETURN p
那么,我怎样才能在三个关系距离处得到支架,并且在一条路径中可选择地将这些分子连接到任何一个(后续治疗所需)?
答案 0 :(得分:1)
我想如果你想要返回另一个分子,你实际上必须RETURN
它:
MATCH path=(:Molecule {Name: 'mol25'})-[:hasSubstructure*1..3]-(s:Scaffold)
WHERE s.Num_Rings > 1
OPTIONAL MATCH (s)<-[:hasSubstructure]-(other:Molecule)
RETURN path, other
答案 1 :(得分:0)
根据上述建议,让我们添加一个名称并返回附加的分子。
MATCH (s:Scaffold) WHERE s.Num_Rings > 1 WITH s
MATCH p=((:Molecule {Name: 'mol25'}) -[:hasSubstructure*1..3]- (s))
OPTIONAL MATCH (s) <-[:hasSubstructure]- (m:Molecule)
WHERE s.Num_Rings > 1
RETURN p,m
它仍然没有返回预期的图形,正确地返回分子,也返回了添加支架,但仍然遍历了Num_Rings = 1的支架。