如何使用 Neo4j 查询恢复表格数据?

How to recover tabular data using a Neo4j query?

我已将数字表格数据作为关系属性存储在 Neo4j 数据库中。我想以表格形式恢复数据。

比如有一个节点存储如下:

MATCH (g:GNE),(p:EXP)
WHERE g.etr='5313' AND p.NExp='Bos_RM'
CREATE UNIQUE (p)-[r:Was_norm
    {Method:'NULL', time_t_35: '6.04',time_t9: '6.587',time_t14: '5.708',time_t31: '6.89',time_t224: '4.842'}
  ]->(g)

我试过这样的查询:

MATCH (g:GNE)-[r1:Was_sel]-(e:EXP)-[r2:Was_norm]-(g)
WHERE e.NExp = 'Bos_SM'
RETURN g.etr,r2

但我想以表格形式恢复数据,并且顺序正确。

有人有什么建议吗?

鉴于 Cypher 当前的功能,您当前的数据模型可能无法完成您想要的操作。部分问题在于,如果不对 属性 的名称进行硬编码(在您的查询中),就无法获得 属性 值。问题的另一部分是 属性 键不一定按原始顺序(或任何可预测的顺序)返回。

相反,您可以通过更改存储表格数据的方式来解决这些问题。

例如,假设您以这种方式存储了一个节点(注意集合是按所需顺序存储的):

MATCH (g:GNE),(p:EXP)
WHERE g.etr='5313' AND p.NExp='Bos_RM'
CREATE UNIQUE
  (p)-[r:Was_norm {
    Method:'NULL',
    times: [    9,    14,   31,  224],
    values:[6.587, 5.708, 6.89, 4.842]
  }]->(g)

鉴于上述数据模型,您可以轻松地将表格数据作为 2 个单独的数组取回:

MATCH (g:GNE)-[r:Was_norm]->(p:EXP)
WHERE g.etr='5313' AND p.NExp='Bos_RM'
RETURN g.etr, r.times, r.values;

或者,如果您想将数据返回到单个数组中:

MATCH (g:GNE)-[r:Was_norm]->(p:EXP)
WHERE g.etr='5313' AND p.NExp='Bos_RM'
RETURN g.etr,
  REDUCE(s =[], i IN RANGE(0,LENGTH(r.times)-1) | s + { time: r.times[i], value: r.values[i]}) AS table;

上述查询 (see this console) 的结果如下所示:

+-------------------------------------------------------------------------------------------------------+
| g.etr  | table                                                                                        |
+-------------------------------------------------------------------------------------------------------+
| "5313" | [{time=9, value=6.587},{time=14, value=5.708},{time=31, value=6.89},{time=224, value=4.842}] |
+-------------------------------------------------------------------------------------------------------+