【发布时间】:2017-08-23 22:13:46
【问题描述】:
这是我用于查询测试的 Neo4j 沙箱:
Neo4j Browser: https://10-0-1-223-34371.neo4jsandbox.com/
Direct Neo4j HTTP: http://54.89.60.35:34371/browser/
Username: neo4j
Password: capacities-complement-deputies
IP Address: 54.89.60.35
HTTP Port: 34371
Bolt Port: 34370
我有以下 Cypher 查询:
MATCH (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[v1:HAS_VALUE_ON]-(childD)
WHERE NOT (ch1)<-[:DEPENDS_ON]-() AND parentD.id = 1
RETURN v1
正确返回以下数据(1条记录):
{
"totalHistoryValues": 0,
"available": true,
"description": "Integer value 1",
"value": 10
}
但在以下查询中作为模式理解:
MATCH (parentD)-[:CONTAINS]->(childD:Decision)
WHERE parentD.id = 1
WITH * MATCH (childD)-[ru:CREATED_BY]->(u:User)
OPTIONAL MATCH (childD)-[rup:UPDATED_BY]->(up:User)
WITH ru, u, rup, up, childD
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: v1.totalHistoryValues, description: v1.description, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics,
[ (childD)-[rdt:BELONGS_TO]->(t:Tag)
| t ] AS tags
valuedCharacteristics 意外包含 2 个值:
{
"totalHistoryValues": 0,
"description": "Integer value 2",
"valueType": "INTEGER",
"characteristicId": 2,
"available": true,
"visualMode": "INTEGERRANGESLIDER",
"value": 20
}
,
{
"totalHistoryValues": 0,
"description": "Integer value 1",
"valueType": "INTEGER",
"characteristicId": 1,
"available": true,
"visualMode": "INTEGERRANGESLIDER",
"value": 10
}
这部分查询有什么问题:
[ (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: v1.totalHistoryValues, description: v1.description, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
以及如何修复它以返回正确的单个记录(因为 value#2 设置为来自另一个父级 (id=2) 的特征并且不应出现在此处)?
【问题讨论】: