【发布时间】:2019-06-29 00:48:31
【问题描述】:
以下查询仅返回 vlabel。
它也应该返回elabls吗?
match
return distinct labels;
【问题讨论】:
-
在运行一些查询时(在 2.1.3 上)我发现
label()函数适用于顶点和边,尽管它似乎将标签作为字符串返回,与labels()不同返回一个数组。
标签: cypher graph-databases agens-graph
以下查询仅返回 vlabel。
它也应该返回elabls吗?
match
return distinct labels;
【问题讨论】:
label() 函数适用于顶点和边,尽管它似乎将标签作为字符串返回,与 labels() 不同返回一个数组。
标签: cypher graph-databases agens-graph
根据“列表函数”部分中的the docs,labels() 函数将只返回 vlabel。
labels()
返回作为参数传递的顶点的 vlabel。将参数传递给标签函数时应该小心;当您使用 MATCH 子句找到与模式匹配的顶点,分配一个变量并将该变量作为参数传递时,顶点本身不能作为参数传递给标签函数,而必须始终作为变量传递。
如果您想要边缘/关系,文档声明使用relationships() 函数:
relationships()
返回作为参数传递的路径中存在的边。将参数传递给关系函数时应该小心;当您使用 MATCH 子句找到与模式匹配的路径、分配变量并将该变量作为参数传递时,路径本身不能作为参数传递给关系函数,但必须始终作为变量传递。配合count函数使用,可以求出路径中的边数。
因此,要同时列出 vlabels 和 elabels,您需要类似以下查询(注意我们将生成的路径分配给 p,该路径将传递给 relationships 函数):
MATCH p=(n)-[r]->(m)
RETURN DISTINCT labels(n), relationships(p), labels(m);
-- Example results
labels | relationships | labels
----------+-------------------------------------------+----------
["part"] | [used_by[19.3][18.4,18.5]{"quantity": 1}] | ["part"]
["part"] | [used_by[19.4][18.5,18.6]{"quantity": 2}] | ["part"]
["part"] | [used_by[19.5][18.4,18.7]{"quantity": 1}] | ["part"]
(3 rows)
【讨论】: