来自neo4j查询的异常响应
我有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]
(a : Project)-[:TAGGED]-(t : TAG)
(a : Project)<-[:HAVE_DONATED{amount, timestamp}]-(u : User)
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
您通过同时搜索标签和捐赠来生成笛卡尔积。如果你运行这个查询,我想你会看到发生了什么
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