【问题标题】:Cypher query to return one of each sub-nodes密码查询以返回每个子节点之一
【发布时间】:2014-08-05 16:08:08
【问题描述】:

我有下面的图表 (try it in the neo4j console)。从中间开始,我如何编写一个密码查询,将结果限制为仅包含来自每个 2 级节点的一个,例如只返回红色节点?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我假设您想在第二级随机选择。在这种情况下,以下 Cypher 语句可以完成这项工作:

    START n=node:node_auto_index("name:start")
    MATCH (n)-[:link]->(first)
    WITH first
    MATCH first-[:link]->(second)
    WITH first, collect(second) AS coll
    RETURN first, coll[toInt(length(coll)*rand())]
    

    我们使用collect 将第二度节点放入每个first 节点的集合中。使用数组下标运算符,我们随机选择一个元素。 rand() 返回一个介于 0 和

    【讨论】:

    • 你也可以只返回 coll[0]。
    • 我相信他想选择具有最高 Id (或一些 int 参数)的节点。无论如何,您的 2x 匹配查询可以简化为 MATCH (n)-[:link]->(first), first-[:link]->(second)
    • 是的,实际上我确实希望它排序,但我想通了;必须在 order by 子句中添加一个额外的 with 语句。因为没有任何方法可以对集合进行排序,对吧?
    • 这似乎是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多