Rest 语法问题?在neo4j cypher语句中将对象作为参数传递
我正在使用REST API对事务端点运行这样的查询:Rest 语法问题?在neo4j cypher语句中将对象作为参数传递,rest,neo4j,parameter-passing,cypher,Rest,Neo4j,Parameter Passing,Cypher,我正在使用REST API对事务端点运行这样的查询: { "statements" : [{"statement":"MATCH (n)-[r]-(m) WHERE id(n) IN {diagramnodes} return [type(r),labels(m)] ", "parameters" :{ "diagramnodes" : [28] }}] } 它返回预期结果: { "commit": "http://myserver:7474/db/
{
"statements" : [{"statement":"MATCH (n)-[r]-(m) WHERE id(n) IN {diagramnodes} return [type(r),labels(m)] ",
"parameters" :{
"diagramnodes" : [28]
}}]
}
它返回预期结果:
{
"commit": "http://myserver:7474/db/data/transaction/542/commit",
"results": [
{
"columns": [
"[type(r),labels(m)]"
],
"data": [
{
"row": [
[
"CONTAINS",
[
"Sentence"
]
]
]
},
{
"row": [
[
"CONTAINS",
[
"Prologram",
"Diagram"
]
]
]
},
.......
]
}
],
"transaction": {
"expires": "Sun, 07 Sep 2014 17:50:11 +0000"
},
"errors": []
}
添加另一个参数和筛选器以限制返回的REL类型时:
{"statements": [{
"statement": "MATCH (n)-[r]-(m) WHERE id(n) IN {diagramnodes} AND [type(r),labels(m)] IN {includerels} return r ",
"parameters": {
"diagramnodes": [28],
"includerels": [
[
"CONTAINS",
[
"Prologram",
"Diagram"
]
],
[
"HAS_TARGET",
["Term"]
]
]
}
}]}
它不会返回任何结果。为什么?
中的操作很可能只适用于基本值的集合
您可以尝试将其重写为ALL(x in coll WHERE expr(x))
谓词
对于输入,例如:
[["CONTAINS",["Prologram","Diagram"]],
["HAS_TARGET",["Term"]]]
您可以尝试:
ALL(entry in {includerels} WHERE type(r) = entry[0] AND ALL(l in labels(n) WHERE l in entry[1]))
我找到了一个解决方法,通过连接reltype和标签,并将其与一组基本类型进行比较。这是密码(添加了一些CRLF以便于阅读)
注1:类型(r)+REDUCE(acc='',标签(m)中的p)| acc+''+p)不起作用,您必须插入一个带有
注2:将嵌套对象集合与IN子句进行比较应该是可能的,并保留在我的愿望列表中。;) 您可以在参数数组上使用“展开”,而不是在中使用。根据您的数据,您可能还必须使用DISTINCT。但是放松对我来说很有效。嗨@michael hunger,谢谢。虽然我还没有做到这一点,但我想你的建议并不能阻止存在部分匹配的匹配,即当标签(m)=a,B且includerels包含“KNOWS”、[a,B,C]时。我找到了另一个解决方法,我将作为答案发布
{
"statements" : [{"statement":"
MATCH (n)-[r]-(m)
WHERE id(n) IN {diagramnodes}
WITH type(r) as rtype, REDUCE(acc = '', p IN labels(m)| acc + ' '+ p) AS mlabels,m
WITH rtype+mlabels As rtypemlabels,m
WHERE rtypemlabels IN {includerels}
RETURN rtypemlabels,id(m) ",
"parameters" :{
"diagramnodes" : [28],
"includerels": ["HAS_TARGET Term","CONTAINS Sentence","CONTAINS Prologram Diagram"]
}}]
}