如何快速获取根节点的属性?
发布于 3 年前 作者 wandf12345 656 次浏览 来自 问答

大神们好,我可以创建很多小的子图,每个子图都有类似于根节点一样,其他的节点都是从这个节点关系连接而来的。 有一些公用的属性是整个子图的,如subname, id, etc… 但是也没必要每个节点的属性都保存一份,太浪费空间也不好维护,那么可以只在根节点保留一份吗? 其他的节点想用这些属性直接引用? 所以有没有方法快速获取根节点的属性? 如节点 root->a, a->b, a-> c, b->d, c->e… 这里root可以看做根节点,那么如果查询的时候,match到里面的子节点,能否快速知道root节点的属性?

4 回复

可以参考下面的实现:

给定一个节点从关联的子图中查找ROOT节点

先找到该节点所属的子图,然后从子图中过滤出ROOT节点即可

MATCH (n:Child)
CALL apoc.path.expand(n,'Follow',NULL,0,6) YIELD path WITH COLLECT(path) AS subGraph
//WITH subGraph
//MATCH p=(n:Root)--() WITH [p] AS subGraph LIMIT 1
UNWIND subGraph AS p
WITH nodes(p) AS nodes
UNWIND nodes AS node
WITH node
WHERE EXISTS(node.subname)
RETURN node

另外可以使用下面的方式将这个复杂的查询包装成函数或过程,以供后续的调用:【在你的案例中输入是一个subGraph,也就是path列表;输出是一个节点或节点属性】

CALL apoc.custom.asFunction(
  '数字打印函数',
  'RETURN $input*2 as answer',
  'long',
  [['input','number']]
);
RETURN custom.数字打印函数(12) AS value;
CALL apoc.custom.asProcedure('数字打印过程','RETURN $input as answer','read',[['answer','number']],[['input','int','42']]);
CALL custom.数字打印过程(12) YIELD answer RETURN answer;

谢谢 真大佬

@crazyyanchao 你好啊 大佬。你这么复杂的语法哪里学到的 我看入门教程一般只有match, where, return…等基础的。 请问哪里有高端语法的手册?

回到顶部