Cypher 是一种非常强大的语言。如果您知道要从节点获取哪些属性,您甚至可以返回一个类似 json 的输出,该输出还维护您在图中实际建模的结构,您可以执行以下操作:
MATCH (brand:Brand)-[:CREATED_A]->(campaign:Campaign)<-->(node)
WITH
brand,
campaign as campaign,
COLLECT({
property1 : node.property1,
property2 : node.property2
}) as nodes
RETURN
{
name : brand.name,
logoUrl : brand.logoUrl,
campaigns : COLLECT({
name : campaign.name,
timestamp : campaign.timestamp,
nodes : nodes
})
} as brands
这会输出一个json结构如:
[
{
name : "my name",
logoUrl : "http://www...",
campaigns : [
{
name : "my campaign name",
timestamp : 1484172044462,
nodes : [
{
property1 : "property1",
property2 : "property2"
}
]
}
]
}
]
这实际上很好地反映了您的图形模型。
此外,由于您没有执行 RETURN COLLECT(...),因此您可以迭代 Record 结果,而不是获取第一个(也是唯一一个)记录并将所有行放入其中。当您处于嵌入式服务器等情况时,这可能是一种方便的方式,您可以在其中实际流式传输结果数据而不是一次性检索它。
即使您没有任何集合(例如,一个活动只有一个节点)并且路径变得更深,这种方法也很有效。
但是,当您的模型是一棵树(或更糟糕的是,一个图)时,您可能会遇到挑战。
您可以在这个不错的要点中找到更多详细信息:
https://gist.github.com/rherschke/9269173