neo4j返回根节点一次,json

时间:2015-05-31 17:49:42

标签: neo4j cypher

我正在尝试对节点的所有已知内容进行html视图。

所以,如果我要选择那个节点nRETURN 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并将其包含在一个密码查询中?

2 个答案:

答案 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样板。)