簡體   English   中英

Neo4j Cypher模式理解

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM