我正在尝试对节点的所有已知内容进行html视图。
所以,如果我要选择那个节点n
和RETURN n
,我会得到一个带有n: { stuff ... }
的json对象,如果我还返回它的关系和连接的节点{{ 1}},现在我得到一个非常详细的json对象:
RETURN n,r,n2
相同的确切数据多次出现在[
{
n: { originating node details },
r: { relationship details },
n2: { connected node details }
},
{
n: { originating node details },
r: { relationship details },
n2: { connected node details }
},
{
n: { originating node details },
r: { relationship details },
n2: { connected node details }
}
]
中。因此,从理论上讲,这是可以的,我可以说n
并将其用作获取主节点数据的方法,然后单独迭代所有对象以列出连接节点数据。但是,这似乎浪费了数据传输。
目前,为了限制这些数据,我只是var seedNodeData = results[0].n
,因为第一个数据始终是相同的,但我需要单独调用以获取RETURN r,n2
的数据。
有没有办法打一次电话来获取n
一次的信息,然后根据需要多次n
并将其包含在一个密码查询中?
答案 0 :(得分:4)
您可以将关系和亲戚聚合到一个集合中。 这样的事情对你有用吗?
match n-[r]->n2
with n, [type(r), n2] as relative
return { root: n, relatives: collect(relative) }
答案 1 :(得分:2)
我会使用一组地图来描述每个其他节点以及连接它们的关系。
MATCH (n)-[r]-(o) WHERE ...
RETURN n AS node, labels(n) AS node_labels, COLLECT({rel: r, rel_type: type(r), other: o, other_labels: labels(o)}) AS relations
使用此RETURN
语句,您只需返回一次主题节点(及其属性和标签),以及描述关系(包括类型和属性)和相关节点(两者都有)的映射列表标签和属性包括在内。)
输出只是一个“行”,结构如下:
[
{"subject_prop1": 1, "subject_prop2": 2, ...},
["SubjectLabel1", "SubjectLabel2", ...],
[
{
"rel": {"rel_prop1": 1, "rel_prop2": 2, ...},
"rel_type": "RELTYPE",
"other": {"other_prop1": 1, "other_prop2": 2, ...},
"other_labels": ["Label1", "Label2", ...],
},
{
...
}
]
]
(我从结构中排除了Neo4j样板。)