Rest 语法问题?在neo4j cypher语句中将对象作为参数传递

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/

我正在使用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/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"]
}}]
}