【问题标题】:Neo4j Cypher -- limit for "in" clause in queryNeo4j Cypher——查询中“in”子句的限制
【发布时间】:2017-02-21 12:27:38
【问题描述】:

我正在研究获取路径中存在的节点的密码查询,因此我们提供了路径中预期的起始节点和节点列表,预期结果是提供的列表中的节点。

您能否建议 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);

谢谢 导航

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我不确定集合的限制是什么,但我可以使用 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);
    

    编辑

    根据您的评论,您似乎只想返回 :Equipment 节点具有指向您的 :person 节点的路径的设备密钥。

    您当前使用的 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
    

    【讨论】:

    • 谢谢它的帮助。
    • 在我的用例中,我希望将结果作为存在于第 n 级路径中的键,因此使用上面的查询将是:“WITH [1505697,2406945,2408297,2408531,2410815,2413566 ,2415224] asequipKeys MATCH (n:person{key:2529962, ownBy:0}) UNWINDequipKeys asequipKey MATCH (c:Equipment{key:equipKey}) MATCH path = (n)
    【解决方案2】:

    您可以轻松测试它:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2015-11-01
      相关资源
      最近更新 更多