Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j密码查询在collect中收集_Neo4j_Match_Cypher - Fatal编程技术网

Neo4j密码查询在collect中收集

Neo4j密码查询在collect中收集,neo4j,match,cypher,Neo4j,Match,Cypher,我有一个问题: start brand=node(62) match brand-[:CREATED_A]->(campaign:Campaign)<-->(node) return DISTINCT brand,campaign,collect(node) ; start brand=node(62)匹配品牌-[:CREATED_A]->(活动:活动)(node) 返回不同的品牌、活动、收集(节点); 现在,结果几乎如我所愿。我缺少的一点是,我希望有以下层次结构:

我有一个问题:

start brand=node(62) match  brand-[:CREATED_A]->(campaign:Campaign)<-->(node) 
return DISTINCT  brand,campaign,collect(node) ;
start brand=node(62)匹配品牌-[:CREATED_A]->(活动:活动)(node)
返回不同的品牌、活动、收集(节点);
现在,结果几乎如我所愿。我缺少的一点是,我希望有以下层次结构:

品牌有很多活动,活动有很多节点与之相连,所以品牌活动中的节点

现在,该活动将多次返回到正在返回的每个活动

我提供了一个示例,说明了解决方案。简而言之,它使用文字映射来格式化数据,并收集两个数据,以确保品牌不会出现多次

MATCH 
    (brand:Brand)-[:CREATED_A]->(campaign:Campaign)<-->(node)
WITH 
    brand, 
    { 
        campaign : campaign, 
        nodes : COLLECT(node)
    } AS campaigns
WITH 
    { 
        brand : brand, 
        campaigns : COLLECT(campaigns)
    } AS brands
RETURN brands
匹配
(品牌:品牌)-[:创建的\-A]->(活动:活动)(节点)
具有
品牌,
{ 
运动:运动,
节点:收集(节点)
}作为运动
具有
{ 
品牌:品牌,,
活动:收集(活动)
}作为品牌
回归品牌

这使得品牌只出现一次,您就可以获得一个很好的输出格式。

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
这实际上很好地反映了您的图形模型

此外,由于您没有执行RETURN-COLLECT(…),这允许您迭代记录结果,而不是获取第一条(并且只有一条)记录并将所有行放入其中。当您处于嵌入式服务器这样的情况时,这可能是一种方便的方法,在这种情况下,您实际上可以流式传输结果数据,而不是一次性检索结果数据

即使您没有任何集合(例如,一个活动只有一个节点),而且如果路径变得更深,这种方法也可以很好地工作。 然而,当您的模型是一棵树(或者更糟糕的是,是一个图形)时,您可能会遇到挑战

您可以在以下要点中找到更多详细信息:

[
    {
        name : "my name",
        logoUrl : "http://www...",
        campaigns : [
            {
                name : "my campaign name",
                timestamp : 1484172044462,
                nodes : [
                    {
                        property1 : "property1",
                        property2 : "property2"
                    }
                ]
             }
         ]
    }
]