У меня есть Neo4j дб с узлами, какНеобычный ответ от Neo4j запроса
(a : Project)-[:TAGGED]-(t : TAG)
(a : Project)<-[:HAVE_DONATED{amount, timestamp}]-(u : User)
У меня есть 3 проекта в моей дб сказать a1, a2, a3, где a1, a2, a3 имеют 2, 3, 8 меток соответственно. 2, 0, 1 пользователи пожертвовали для проектов a1, a2, a3 соответственно. Теперь, если я хочу получить общее количество пожертвований и доноров для каждого проекта, результат будет зависеть от тегов. Я не знаю почему.
Match (a : Project)
Optional Match (a)-[r:HAVE_DONATED]-(u : User)
return {id : a.id, donor : count(u), donation : sum(toInt(r.amount))} as project
- ID: a1, донор: 2, пожертвования: 24667
- ID: a2, донор: 0, дарение: 0
- ID: 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
- ID: a1, донор: 4, пожертвования: 49334
- ID: a2, донор: 0, дарение: 0
ID: a3, донор: 8, пожертвования: 896000
Если я включаю теги, то донор и пожертвования умножаются на количество тегов. Пожалуйста, помогите мне, где мой запрос пойдет не так.
У вас есть некоторые данные репрезентативной выборки вы можете предоставить? –
@ dave-bennett Нет, у меня нет выборочных данных. – user3542450
@ dave-bennett Я написал запросы на collabedit, пожалуйста, просмотрите его. Из-за некоторой технической проблемы я не могу поделиться консольной консолью neo4j. Вот ссылка collabedit. (Http://collabedit.com/aywme). Вы просто копируете и вставляете запросы в свой db и создаете все необходимые узлы. – user3542450