对于像MATCH (a:Address)-[:BelongTo]->(w1:Wallet), (a)-[r0:BelongTo]->(w2:Wallet) WHERE ID(w1)>ID(w2) WITH w1, w2...
这样的条款,是否可以确保ex。 w1总是一个固定的节点?如果是,是否可以通过选择具有ex的节点来决定节点。所有节点上某个属性的最小值,也可能是w1?
w1 w2
--------
a b
b c
a c
我只想要返回这两行结果:
w1 w2
--------
a b
a c
注意:我希望查询尝试将每对钱包都放到一个地址所属的地方。如果返回a,则应包括属于两个或更多钱包的所有地址。
例如,如果有两个地址属于三个不同的钱包,那么您发布的查询会做什么? 更具体地,如果地址a1和a2分别属于b1,c1,d1和b2,c2,d2(以id为b1> c1> d1> b2> c2> d2)
我希望它返回:
a w1 w2
-----------
a1 b1 c1
a1 b1 d1
a2 b2 c2
a2 b2 d2
有可能吗?
答案 0 :(得分:0)
是的,您可以通过查找(对于每个a:地址),具有最小ID的钱包来执行此操作。在你匹配之后:钱包,你可以匹配所有其他:钱包。
MATCH (a:Address)-[:BelongTo]->(w1:Wallet)
WITH a, min(id(w1)) as minId
// since we have the minId, we can do a fast lookup of the node
MATCH (minW:Wallet)
WHERE id(minW) = minId
// now get all the others
MATCH (a)-[:BelongTo]->(w2:Wallet)
WHERE minW <> w2
...
如果您不关心固定节点的使用方式,并且只关注查询的持续时间,则可能更容易收集所有:电子钱包节点,获取集合中的第一个节点,然后将其余部分UNWIND成行并继续查询:
MATCH (a:Address)-[:BelongTo]->(w:Wallet)
WITH a, collect(w) as wallets
WITH a, head(wallets) as w1, wallets
UNWIND tail(wallets) as w2
...