我已将数据表格数据存储为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
但我想以表格形式恢复数据,并且顺序正确。
有人有任何建议吗?
答案 0 :(得分:3)
鉴于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}] |
+-------------------------------------------------------------------------------------------------------+