Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
满足特定模式的Neo4j匹配关系参数_Neo4j_Cypher - Fatal编程技术网

满足特定模式的Neo4j匹配关系参数

满足特定模式的Neo4j匹配关系参数,neo4j,cypher,Neo4j,Cypher,使用cypher,是否有任何方法可以匹配关系一般满足特定输入模式的路径 我知道我可以做像这样的事情 parameters: { "age": 20 } MATCH (n)-[r:MY_RELATION]-() WHERE $age>18 AND $age<24 ... 当然,正如可以在中读取的那样,不可能通过驻留在DB中的名称动态加载参数 可能还有一些解决办法?[更新] 原始答复: 你的问题没有说得很清楚,但我还是会尽力回答的 我想这就是你想要的: parameters:

使用cypher,是否有任何方法可以匹配关系一般满足特定输入模式的路径

我知道我可以做像这样的事情

parameters: {
    "age": 20
}

MATCH (n)-[r:MY_RELATION]-() WHERE $age>18 AND $age<24 ...
当然,正如可以在中读取的那样,不可能通过驻留在DB中的名称动态加载参数

可能还有一些解决办法?

[更新]

原始答复: 你的问题没有说得很清楚,但我还是会尽力回答的

我想这就是你想要的:

parameters: {
  "minimum": 19,
  "maximum": 23
}

MATCH (n)-[r:MY_RELATION]-() WHERE $maximum >= r.age >= $minimum
...
无需指定“类型”参数。只需确保参数值的类型正确即可

新答案(基于更新的问题): 假设以这种方式指定参数(其中
test
表示测试类型):

然后可以执行此操作(其中
r
将包含属性
test
min
max
):

为了帮助您决定使用哪种方法,您应该在代码和一些实际数据中使用这两种方法,以查看哪种方法对您来说更快

甚至更新的答案(基于问题中的编辑2) 下面的参数和查询应该满足您的要求。方括号可用于动态指定属性的名称

parameters: {
  "data": {
    "age": 20,
    "location": "A"
  }
}

MATCH (n)-[r]-()
WHERE r.testtype='integer' AND $data[r.testparamname] < r.max
OR r.testtype='string' AND $data[r.testparamname]=r.allowedStringValue
...
参数:{
“数据”:{
“年龄”:20岁,
“地点”:“A”
}
}
匹配(n)-[r]-()
其中r.testtype='integer'和$data[r.testparamname]
此解决方案是否满足您的要求

考虑以下小样本数据集

MERGE (p1:Person {name: 'P 01'})
MERGE (p2:Person {name: 'P 02'})
MERGE (p3:Person {name: 'P 03'})
MERGE (p1)-[:MY_RELATION { minimum: 19, maximum: 23 }]->(p2)
MERGE (p2)-[:MY_RELATION { minimum: 19, maximum: 20 }]->(p3)
此查询将仅返回提供的参数符合关系约束的节点和关系(例如,$age=21应仅返回一行)。这基本上与@cybersam的提议相反

MATCH (s:Person)-[r:MY_RELATION]->(e:Person)
WHERE r.minimum <= $age <= r.maximum
RETURN *
匹配(s:Person)-[r:MY_RELATION]->(e:Person)

其中r.最小值请参见原始问题中的我的编辑。特别是,我需要约束驻留在图形的关系中,而不是参数中(在您的示例中,min/max位于参数中)。参数应该是满足约束的数据谢谢您的更新。不过,它还不够通用。请参阅更新的问题
MATCH (n)-[r]-(m)
WHERE TYPE(r) = $test AND r.min <= $age <= r.max
RETURN n, r, m;
parameters: {
  "data": {
    "age": 20,
    "location": "A"
  }
}

MATCH (n)-[r]-()
WHERE r.testtype='integer' AND $data[r.testparamname] < r.max
OR r.testtype='string' AND $data[r.testparamname]=r.allowedStringValue
...
MERGE (p1:Person {name: 'P 01'})
MERGE (p2:Person {name: 'P 02'})
MERGE (p3:Person {name: 'P 03'})
MERGE (p1)-[:MY_RELATION { minimum: 19, maximum: 23 }]->(p2)
MERGE (p2)-[:MY_RELATION { minimum: 19, maximum: 20 }]->(p3)
MATCH (s:Person)-[r:MY_RELATION]->(e:Person)
WHERE r.minimum <= $age <= r.maximum
RETURN *