如何使用多个关系和具有多个节点的路径来简化我的密码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用多个关系和具有多个节点的路径来简化我的密码相关的知识,希望对你有一定的参考价值。

match p=(a:ACCT_NO)
-[r1:TRX_TO]-(n1:ACCT_NO)
-[r2:TRX_TO]-(n2:ACCT_NO)
-[r3:TRX_TO]-(n3:ACCT_NO)
-[r4:TRX_TO]-(b:ACCT_NO)
-[rb:BELONG_TO]->(c1:CUSTOM_NO{sensitivity:'1'})
-[:RELATE_TO*0..2]-(c2:CUSTOM_NO)
where r1.trxAmt > 10000 and r2.trxAmt > 10000 and r3.trxAmt > 10000 and r4.trxAmt > 10000
and a.acctNo in $doubtAcct
and not n1.acctNo in $fliterAcct
and not n2.acctNo in $fliterAcct
and not n3.acctNo in $fliterAcct
return p;

我想找到a和b之间的路径,但在路径中,$ fliterAcct和trxAmt列表中没有节点,关系属性大于10000。

我的问题是如何简化我的密码?因为我不想找到n1,n2,n3和r1,r2,r3的路径,如果我需要搜索几个关系。是否我可以使用[r:TRX_TO * ... 3]这样的模式(实际上我尝试,但错误是类型不匹配:预期任何,地图,节点或关系但是列表(第2行,第7列(偏移量:54) ))“其中r.trxAmt> 10000”)

答案

这是一个简化的查询:

MATCH p = (a:ACCT_NO)-[rels:TRX_TO*4]-(:ACCT_NO)-[:BELONG_TO]->(:CUSTOM_NO{sensitivity:'1'})-[:RELATE_TO*0..2]-(:CUSTOM_NO)
WHERE a.acctNo in $doubtAcct AND
  ALL(r IN rels WHERE r.trxAmt > 10000) AND
  NONE(n IN NODES(p)[1..3] WHERE n.acctNo in $fliterAcct)
RETURN p;

[EDITED]

或者,由于可变长度关系的标识符的使用是deprecated since version 3.2,您可以这样做:

MATCH p = (a:ACCT_NO)-[:TRX_TO*4]-(:ACCT_NO)-[:BELONG_TO]->(:CUSTOM_NO{sensitivity:'1'})-[:RELATE_TO*0..2]-(:CUSTOM_NO)
WHERE a.acctNo in $doubtAcct AND
  ALL(r IN RELATIONSHIPS(p)[0..3] WHERE r.trxAmt > 10000) AND
  NONE(n IN NODES(p)[1..3] WHERE n.acctNo in $fliterAcct)
RETURN p;
另一答案

您处于正确的轨道上,可变长度模式是正确的方法,但您需要使用不同的方法来确保所有节点和关系都符合您想要的限制。

match p=(a:ACCT_NO)-[:TRX_TO*4]-(b:ACCT_NO)-[rb:BELONG_TO]->(c1:CUSTOM_NO{sensitivity:'1'})-[:RELATE_TO*0..2]-(c2:CUSTOM_NO)
where a.acctNo in $doubtAcct and all(rel in relationships(p) where type(rel) <> 'TRX_TO' OR r.trxAmt > 10000)
 and none(node in nodes(p) where node in $fliterAcct)
return p;

以上是关于如何使用多个关系和具有多个节点的路径来简化我的密码的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中生成具有相同数量节点和关系的多个随机图?

使用具有多个条件的 XMLNode(.Net) 获取 XML 节点

使用Cypher创建与现有节点的多个关系

查找具有多个传入关系的 neo4j 节点

CUDA:重载共享内存以实现具有多个数组的简化方法

如何使用节点一次安装多个 gulp 包?