我正在处理一个cypher查询,获取路径中存在的节点,因此我们提供了路径中预期的起始节点和节点列表,预期结果是来自提供列表的节点。
你能否说一下Neo4j中in子句的限制是什么,就像我们在sql中限制2100一样。
示例查询:
MATCH (n:person{key:2529962, ownBy:0})
MATCH path = n<-[:relation]-(c:Equipment)
WHERE c.key in [1505697,2406945,2408297,2408531,2410815,2413566,2415224,]
RETURN distinct EXTRACT (p in NODES(path)| p.key);
由于 NAVNEET
答案 0 :(得分:2)
我不确定收藏的限制是什么,但我可以使用return range (1,100000) as largeCollection
轻松创建100,000个。
但是,获取这些节点的更好方法是将集合展开为行,然后在节点上使用这些键进行匹配:
// better to parameterize this, when you get the chance
WITH [1505697,2406945,2408297,2408531,2410815,2413566,2415224] as equipKeys
MATCH (n:person{key:2529962, ownBy:0})
UNWIND equipKeys as equipKey
MATCH (c:Equipment{key:equipKey})
MATCH path = (n)<-[:relation]-(c)
RETURN distinct EXTRACT (p in NODES(path)| p.key);
修改
从您的评论中,您似乎只想返回设备密钥,其中:设备节点具有您的:人员节点的路径。
您当前正在使用的MATCH将找到所有可能的路径,这些路径会阻塞中型到大型的图形,特别是在许多关系中。
您可能想要使用EXISTS()函数,如果存在这样的路径,它将返回true或false。也就是说,您可能需要考虑通过给出可能的上限来限制路径。
WITH [1505697,2406945,2408297,2408531,2410815,2413566,2415224] as equipKeys
MATCH (n:person{key:2529962, ownBy:0})
UNWIND equipKeys as equipKey
MATCH (c:Equipment{key:equipKey})
WITH DISTINCT n, c
WHERE EXISTS( (n)<-[:relation*0..10]-(c) )
RETURN c.key
答案 1 :(得分:0)
您可以轻松测试它:
UNWIND RANGE(0,6) as p
WITH toInt(10^p) as maxx
WITH maxx, RANGE(1,maxx) as testArray
RETURN maxx, size(testArray), maxx IN testArray, (maxx+1) IN testArray