[英]Neo4j Cypher pattern comprehension
這是我的Neo4j Sandbox用於查詢測試:
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
以及如何解決該問題以便返回正確的單個記錄(因為將值#2設置為另一個父代(id = 2)的特征,因此此處不應該顯示該值)?
您應該將parentD
傳遞給WITH
的下一個上下文。 由於您未執行此操作,因此模式理解中使用的parentD
變量未綁定到parentD.id = 1
。 因此parentD
正在MATCH
所有可能的節點。 將查詢更改為:
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, parentD
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.