Neo4j Cypher排序和模式理解

时间:2017-03-11 22:54:10

标签: neo4j cypher

我有以下Cypher查询:

MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User) 
WHERE id(parentD) = 89592 
OPTIONAL MATCH (childD)<-[:SET_FOR]->(sortValue89686:Value)-[:SET_ON]->(sortCharacteristic89686:Characteristic) 
WHERE id(sortCharacteristic89686) = 89686 
WITH ru, u, childD , sortValue89686 
ORDER BY sortValue89686.value ASC, childD.name DESC 
SKIP 0 LIMIT 100 
RETURN ru, u, childD AS decision, 
[ (parentD)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) | {entityId: id(entity),  types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups, 
[ (parentD)<-[:DEFINED_BY]-(c1:Criterion)<-[:VOTED_ON]-(vg1:VoteGroup)-[:VOTED_FOR]->(childD) | {criterionId: id(c1),  weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, 
[ (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[:SET_ON]-(v1:Value)-[:SET_FOR]->(childD) | {characteristicId: id(ch1),  value: v1.value, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics

现在查询中的以下部分:

OPTIONAL MATCH (childD)<-[:SET_FOR]->(sortValue89686:Value)-[:SET_ON]->(sortCharacteristic89686:Characteristic) 
WHERE id(sortCharacteristic89686) = 89686 

为return语句中的所有模式理解生成空值。 commentGroupsweightedCriteriavaluedCharacteristics不为空,仅包含sortValue89686.value不为空的记录的值。

enter image description here

除了上面屏幕截图中的NULL,我预计行的值(对于commentGroupsweightedCriteriavaluedCharacteristics),即使sortValue89686.value为空。

我做错了什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

这看起来是影响Neo4j 3.1.1及更低版本的错误的结果(可能是this one,或者至少与它有关)。

我可以使用Neo4j 3.1.1重现您的结果,但不能在Neo4j 3.1.2中重现(没有空值,结果看起来不错)。

尝试升级到3.1.2(它没有被设置为默认的最新版本,所以从here抓取它)并给它一个旋转。