如何快速获取根节点的属性?
大神们好,我可以创建很多小的子图,每个子图都有类似于根节点一样,其他的节点都是从这个节点关系连接而来的。 有一些公用的属性是整个子图的,如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;