如何使用 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}] |
+-------------------------------------------------------------------------------------------------------+
我已将数字表格数据作为关系属性存储在 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}] |
+-------------------------------------------------------------------------------------------------------+