Neo4j SDN4/OGM密码查询和重复结果

Neo4j SDN4/OGM密码查询和重复结果,neo4j,cypher,spring-data-neo4j-4,neo4j-ogm,Neo4j,Cypher,Spring Data Neo4j 4,Neo4j Ogm,我有以下密码查询: MATCH (parentD)-[:CONTAINS]->(childD:Decision) WHERE parentD.id = 1 OPTIONAL MATCH (childD)-[sortValue1:HAS_VALUE_ON]->(sortCharacteristic1:Characteristic) WHERE sortCharacteristic1.id = 1 WITH * MATCH (childD)-[ru:CREATED_BY]->

我有以下密码查询:

MATCH (parentD)-[:CONTAINS]->(childD:Decision) 
WHERE parentD.id = 1 
OPTIONAL MATCH (childD)-[sortValue1:HAS_VALUE_ON]->(sortCharacteristic1:Characteristic) 
WHERE sortCharacteristic1.id = 1 
WITH * MATCH (childD)-[ru:CREATED_BY]->(u:User) 
OPTIONAL MATCH (childD)-[rup:UPDATED_BY]->(up:User)  
WITH ru, u, rup, up, childD , sortValue1 
ORDER BY sortValue1.value ASC SKIP 0 LIMIT 100 
RETURN ru, u, rup, up, childD AS decision, 
[ (parentD)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) 
  | {entityId: toInt(entity.id),  types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups, 
[ (parentD)<-[:DEFINED_BY]-(c1)<-[vg1:HAS_VOTE_ON]-(childD) 
  | {criterionId: toInt(c1.id),  weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, 
[ (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[v1:HAS_VALUE_ON]-(childD)  WHERE NOT ((ch1)<-[:DEPENDS_ON]-())  
  | {characteristicId: toInt(ch1.id),  value: v1.value, available: v1.available, totalHistoryValues: toInt(v1.totalHistoryValues), description: v1.description, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
我已更新了第一个查询,以便返回带有标记的决策:

MATCH (parentD)-[:CONTAINS]->(childD:Decision) 
WHERE parentD.id = 1 
OPTIONAL MATCH (childD)-[sortValue1:HAS_VALUE_ON]->(sortCharacteristic1:Characteristic) 
WHERE sortCharacteristic1.id = 1 
WITH * 
MATCH (childD)-[ru:CREATED_BY]->(u:User) 
OPTIONAL MATCH (childD)-[rup:UPDATED_BY]->(up:User) 
OPTIONAL MATCH (childD)-[rdt:BELONGS_TO]->(t:Tag)  
WITH ru, u, rup, up, rdt, t, childD , sortValue1 
ORDER BY sortValue1.value ASC SKIP 0 LIMIT 100 
RETURN ru, u, rup, up, rdt, t, childD AS decision, 
[ (parentD)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) 
  | {entityId: toInt(entity.id),  types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups, 
[ (parentD)<-[:DEFINED_BY]-(c1)<-[vg1:HAS_VOTE_ON]-(childD) 
  | {criterionId: toInt(c1.id),  weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, 
[ (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[v1:HAS_VALUE_ON]-(childD)  WHERE NOT ((ch1)<-[:DEPENDS_ON]-())  
  | {characteristicId: toInt(ch1.id),  value: v1.value, available: v1.available, totalHistoryValues: toInt(v1.totalHistoryValues), description: v1.description, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
而不是有3个
决策
-
结果
包含4个
决策

Redis(null tags)
MongoDB(null tags)
Neo4j(tag1 and tag 2)
Neo4j(tag1 and tag 2)
如您所见,结果两次包含相同的Neo4j决策

我做错了什么?如何告诉OGM/SDN 4在结果集中只放置一次Neo4j(标记1和标记2)

顺便说一句-我已经添加了
可选匹配(childD)-[rdt:belling_TO]->(t:Tag)
,以便在
决策中初始化
标记。如果可以通过其他方式完成,也请让我知道

已更新

我创建了一个Neo4j沙盒来测试上述查询:

http://52.87.220.140:33853/browser/
Username: neo4j
Password: idea-chocks-payroll
我已经调试了OGM/Neo4j的内部结构。以下数据随
org.neo4j.graphdb.Result
提供:

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=Node[6677], u=Node[6667], decision=Node[6678], weightedCriteria=[], ru=(6678)-[CREATED_BY,22875]->(6667), valuedCharacteristics=[], rdt=(6678)-[BELONGS_TO,22876]->(6677)}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=Node[6676], u=Node[6667], decision=Node[6678], weightedCriteria=[], ru=(6678)-[CREATED_BY,22875]->(6667), valuedCharacteristics=[], rdt=(6678)-[BELONGS_TO,22877]->(6676)}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=null, u=Node[6667], decision=Node[6684], weightedCriteria=[], ru=(6684)-[CREATED_BY,22895]->(6667), valuedCharacteristics=[{totalHistoryValues=0, description=null, valueType=INTEGER, characteristicId=1, available=null, visualMode=INTEGERRANGESLIDER, value=25}], rdt=null}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=null, u=Node[6667], decision=Node[6681], weightedCriteria=[], ru=(6681)-[CREATED_BY,22886]->(6667), valuedCharacteristics=[{totalHistoryValues=0, description=Integer value, valueType=INTEGER, characteristicId=1, available=true, visualMode=INTEGERRANGESLIDER, value=10}], rdt=null}
(scala.collection.convert.Wrappers$MapWrapper){rup=null,commentGroups=[],up=null,t=Node[6677],u=Node[6667],decision=Node[6678],weightedCriteria=[],ru=(6678)-(创建人,22875]>(6667),valuedCharacteristics=[],rdt=(6678)-(属于,22876]>(6677)}
(scala.collection.convert.Wrappers$MapWrapper){rup=null,commentGroups=[],up=null,t=Node[6676],u=Node[6667],decision=Node[6678],weightedCriteria=[],ru=(6678)-(创建人,22875]->(6667),valuedCharacteristics=[],rdt=(6678)-(属于,22877]->(6676)}
(scala.collection.convert.Wrappers$MapWrapper){rup=null,commentGroups=[],up=null,t=null,u=Node[6667],decision=Node[6684],weightedCriteria=[],ru=(6684)-(创建人,22895]->(6667),valuedCharacteristics=[{totalHistoryValues=0,description=null,valueType=INTEGER,characteristicId=1,available=null,visualMode=IntegerAngelister,value=25}],rdt=null}
(scala.collection.convert.Wrappers$MapWrapper){rup=null,commentGroups=[],up=null,t=null,u=Node[6667],decision=Node[6681],weightedCriteria=[],ru=(6681)-(创建者,22886]->(6667),valuedCharacteristics=[{totalHistoryValues=0,description=Integer值,valueType=Integer,characteristicId=1,available=true,visualMode=IntegerationSlider,value=10}],rdt=null}
org.neo4j.graphdb.Result
模型中有4个对象(行)

我是否需要在我的应用程序代码中处理重复项,或者可以更改Cypher查询或SDN4/OGM以防止
结果中的重复项
?理想情况下,我需要一个包含
decision=Node[6678]
和2
Tag
的单行(
t=Node[6676]
t=Node[6677]
)而不是两个不同的行


例如,是否可以更改以下Cypher RETURN语句以放置标记(
t
)在
decision
内部:
将ru、u、rup、up、rdt、t、childD作为decision返回
,而不是将它们都放在同一个级别?

我注意到可选匹配确实会弄乱基数,也就是行数…尝试像这样简单地添加
distinct
返回distinct(childD)作为决策,ru,u,rup,up,rdt,t,…
感谢您的评论,但不幸的是,它失败了,出现了以下错误:
org.neo4j.driver.v1.exceptions.ClientException:未知函数“distinct”
将distinct放在返回的第一位,如上所示现在查询工作正常,但原始问题相同(决策重复):(如果这不起作用,您也可以尝试在使用distinct
WITH distinct(childD)之前修改WITH语句作为决策,ru、u、rup、up、rdt、t、sortValue1
我注意到可选匹配会弄乱基数,也就是行数…尝试简单地像这样添加
distinct
返回distinct(childD)作为决策,ru,u,rup,up,rdt,t,…
感谢您的评论,但不幸的是,它失败了,出现了以下错误:
org.neo4j.driver.v1.exceptions.ClientException:未知函数“distinct”
将distinct放在返回的第一位,如上所示现在查询工作正常,但原始问题相同(决策副本):(如果这不起作用,您也可以尝试在使用distinct
WITH distinct(child)作为决策、ru、u、rup、up、rdt、t、sortValue 1之前修改WITH语句
http://52.87.220.140:33853/browser/
Username: neo4j
Password: idea-chocks-payroll
(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=Node[6677], u=Node[6667], decision=Node[6678], weightedCriteria=[], ru=(6678)-[CREATED_BY,22875]->(6667), valuedCharacteristics=[], rdt=(6678)-[BELONGS_TO,22876]->(6677)}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=Node[6676], u=Node[6667], decision=Node[6678], weightedCriteria=[], ru=(6678)-[CREATED_BY,22875]->(6667), valuedCharacteristics=[], rdt=(6678)-[BELONGS_TO,22877]->(6676)}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=null, u=Node[6667], decision=Node[6684], weightedCriteria=[], ru=(6684)-[CREATED_BY,22895]->(6667), valuedCharacteristics=[{totalHistoryValues=0, description=null, valueType=INTEGER, characteristicId=1, available=null, visualMode=INTEGERRANGESLIDER, value=25}], rdt=null}

(scala.collection.convert.Wrappers$MapWrapper<A,B>) {rup=null, commentGroups=[], up=null, t=null, u=Node[6667], decision=Node[6681], weightedCriteria=[], ru=(6681)-[CREATED_BY,22886]->(6667), valuedCharacteristics=[{totalHistoryValues=0, description=Integer value, valueType=INTEGER, characteristicId=1, available=true, visualMode=INTEGERRANGESLIDER, value=10}], rdt=null}