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查询的异常响应_Neo4j_Cypher - Fatal编程技术网

来自neo4j查询的异常响应

来自neo4j查询的异常响应,neo4j,cypher,Neo4j,Cypher,我有neo4j数据库,节点如下 (a : Project)-[:TAGGED]-(t : TAG) (a : Project)<-[:HAVE_DONATED{amount, timestamp}]-(u : User) id:a1,捐赠者:2,捐赠:24667 id:a2,捐赠者:0,捐赠:0 身份证号码:a3,捐赠者:1,捐赠:112000 这是正确的,如果我包括标签,那么结果是不同的 Match (a : Project) Optional Match (a)-[:TAGGED]

我有neo4j数据库,节点如下

(a : Project)-[:TAGGED]-(t : TAG)
(a : Project)<-[:HAVE_DONATED{amount, timestamp}]-(u : User)
  • id:a1,捐赠者:2,捐赠:24667
  • id:a2,捐赠者:0,捐赠:0
  • 身份证号码:a3,捐赠者:1,捐赠:112000
  • 这是正确的,如果我包括标签,那么结果是不同的

    Match (a : Project) 
    Optional Match (a)-[:TAGGED]-(t :TAG)
    , (a)-[r:HAVE_DONATED]-(u : User) 
    return {id : a.id, donor : count(u), donation : sum(toInt(r.amount))} as project
    
  • 身份证号码:a1,捐赠者:4,捐赠:49334

  • id:a2,捐赠者:0,捐赠:0

  • 身份证号码:a3,捐赠者:8,捐赠:896000

    若我包括标签,那个么捐赠者和捐赠将乘以标签的数量。请帮助我我的问题出在哪里


  • 您通过同时搜索标签和捐赠来生成笛卡尔积。如果你运行这个查询,我想你会看到发生了什么

    Match (a : Project) 
    Optional Match (a)-[:TAGGED]-(t :TAG), (a)-[r:HAVE_DONATED]-(u : User) 
    return a.id, u, r.amount
    
    对于每个项目,对于返回的每个标签,您的捐赠都是重复的

    我想你想要的是这样的东西

    match (a : Project)
    with a
    optional Match (a)-[r:HAVE_DONATED]-(u : User)
    with a, count(u) as donors, sum(r.amount) as donations
    optional Match (a)-[:TAGGED]-(t :TAG)
    with a, donors, donations, count(t) as tags
    return {id : a.id, donor : donors, donation : donations, tag: tags} as project
    

    你能提供一些有代表性的样本数据吗?@dave bennett不,我没有样本数据。@dave bennett我已经在collabedit上写了查询,请检查一下。由于一些技术问题,我无法共享neo4j控制台链接。这是collabedit的链接。(). 您只需将查询复制并粘贴到数据库中,它就会创建所有必要的节点。
    match (a : Project)
    with a
    optional Match (a)-[r:HAVE_DONATED]-(u : User)
    with a, count(u) as donors, sum(r.amount) as donations
    optional Match (a)-[:TAGGED]-(t :TAG)
    with a, donors, donations, count(t) as tags
    return {id : a.id, donor : donors, donation : donations, tag: tags} as project