Neocons Cypher tquery并从密钥

时间:2015-09-21 02:12:08

标签: neo4j cypher

用neocons调用neo4j(cy / tquery conn node-query {:_nodeid _nodeid})后,如何执行访问函数以从neo4j数据存储响应返回的键中获取属性值?

例如,如果此对象是来自neo4j数据存储区的响应,我使用什么neocons语法来访问存储在键“属性”中的值?

[ {
  "id": "letter-a",
  "name": "Letter A",
  "attributes": [ ... ]
}]

目前我只能达到(第一个_response)但是(get-in(first _response)[:attributes])给我的回报是

*******************编辑*************************** ****

这是我用作调用tquery函数的参数的密码查询字符串:

(def node-query "MATCH (n)-[attributelist:RELATIONSHIPTYPE]->(target)
                 RETURN n.id          AS id, 
                        n.name        AS name, 
                        COLLECT({
                          target    : target.id
                        })            AS attributes;")

我不明白什么类型的变量tquery返回?当客户端在浏览器中一直显示它时,它看起来像这个对象:

[
  {
    "id": "node-999990a0a0a0sa0",
    "name": "Node Name",
    "attributes": [
      {
        "target": "node-id-one"
      },
      {
        "target": "node-id-two"
      },
      {
        "target": "node-id-two"
      },
      {
        "target": "node-id-two"
      },
      {
        "target": "node-id-three"
      }
    ]
  }
]

但是我想在clojure服务器将它传递给客户端之前拦截从tquery返回的内容,并且我想操纵键“属性”的数组值,这样我就可以在交付前运行reduce(tally)报告重建对象对客户端的响应。

{
    ...
    "attributes" : {
        "node-id-one"     : 1,
        "node-id-two"     : 3,
        "node-id-three"   : 1
    }
}

但我遇到了麻烦,因为我不知道从tquery返回的对象访问“attributes”键的语法

1 个答案:

答案 0 :(得分:0)

抱歉,我不明白你的问题。你用tquery运行了哪个查询?

通常您直接从查询中返回您感兴趣的数据。

例如

MATCH (p:Person)-[:ACTED_IN]->(m) 
WHERE p.name = "Tom Hanks" 
RETURN m.title, m.released`

否则您必须使用标签+ unique-property

重新查询
MATCH (m:Movie) 
WHERE m.title = "The Matrix"
RETURN m.title, m.released`

或node-id匹配。

MATCH (m:Movie) 
WHERE id(m) = 123
RETURN m.title, m.released`

您通常会使用参数而不是文字值,即{name}{title}{id}

更新

我认为对于拦截你将不得不研究新保守派的实施。

注意:没有clojure服务器,它是带有http端点的Neo4j服务器。

你应该能够在密码中做你想要的(几乎)。

MATCH (n)-[:RELATIONSHIPTYPE]->(target)
WITH n, target.id as target, count(*) as c
RETURN n.id as id, n.name as name, collect([target,c]) as targets;

不幸的是,目前Cypher中没有动态地图密钥,所以必须有一个元组集合。

PS

您应该至少为n(以及可选的target)节点使用标签。