用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”键的语法
答案 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中没有动态地图密钥,所以必须有一个元组集合。
您应该至少为n
(以及可选的target
)节点使用标签。