使用文字地图语法&的Cypher查询动态键

时间:2015-09-17 04:51:41

标签: neo4j cypher

我想创建一个生成特定json输出的密码查询。此输出的一部分包括一个对象,该对象具有相对于父节点子节点的动态数量的键:

{
   ...

   "parent_keystring"                 : {
           child_node_one.name        : child_node_one.foo
           child_node_two.name        : child_node_two.foo       
           child_node_three.name      : child_node_three.foo
           child_node_four.name       : child_node_four.foo
           child_node_five.name       : child_node_five.foo
   }
}

我试图创建一个密码查询,但我不相信我接近实现上述所需的输出:

MATCH (n)-[relone:SPECIFIC_RELATIONSHIP]->(child_node)
WHERE n.id='839930493049039430'
RETURN n.id          AS id,
       n.name        AS name,
       labels(n)[0]  AS type,
       {
           COLLECT({ 
              child.name : children.foo
           }) AS rel_two_representation
       } AS parent_keystring

我曾计划将children.foo计算为父母的每个特定关系/子女的出现次数。有没有办法利用reduce功能?基于分析下面提出的阵列生成报告的位置?即report是一个json对象,其中每个键是一个不同的RELATIONSHIP,属性值是关系源于父节点的次数?

提前感谢您提供的指导。

2 个答案:

答案 0 :(得分:1)

我不确定Cypher是否允许您使用变量来确定对象的密钥。使用数组会为你工作吗?

COLLECT([child.name, children.foo]) AS rel_two_representation

答案 1 :(得分:0)

我认为,Neo4j Server API输出本身应该被视为任何数据库输出(如MySQL)。即使可以使用默认功能实现所需的输出 - 这对数据库来说也不是自然的方式。

您可能应该考虑创建自己的server plugin。这允许您实现具有所需输出的任何自定义逻辑。