我有一个我刚从SQL DB导入的数据库,例如我们称之为Order
的属性名为PlacedOn
的属性存储为DateTime
,该属性存储为类似2013-05-01T02:15:18+00:00
的节点的一部分。
我现在想要提取日期时间并创建一个关联,以便我能够轻松地查询所有Orders
一个月或一年。
基本上我想要实现的是使关联看起来如下:
(o:Order)-[:PLACED_ON]->(d:Day)-[:BELONGS_TO]->(m:Month)-[:BELONGS_TO]->(y:Year)
对于性能测试,我创建了 1100000 nodes
,因此必须在我的c#代码中加载它并创建它是不切实际的,所以有没有一种方法用Cypher或任何其他方式在Webadmin中,我可以提取日月和年份部分,并使用上述关联创建节点。
此致 基兰
答案 0 :(得分:0)
请查看此Cypher查询,了解如何在Neo4j 2.0中创建DateTime树:
https://gist.github.com/kbastani/8519557#file-calendaryear-cql
为每年的数据运行CalendarYear Cypher脚本。
您需要解析DateTime时间戳值以提取Year,Month,Day整数值。然后,对于您的每个订单,您需要附加一个日期节点。我建议您在导入数据时,在订单中添加具有年,月,日值的属性。
然后分批运行Cypher语句,在每年的每个月添加时间表,并附上记录:
MATCH (order:Order { month: 5, year: 2014 })
WITH collect(order) as orders
FOREACH (order in orders |
MERGE (day:Day { day: order.day, month: order.month, year: order.year })
CREATE (day)<-[:PLACED_ON]-(order))
现在,您可以使用时间轴索引查询数据。
MATCH (order:Order)-[:PLACED_ON]->(day:Day { day: 1, month: 5, year: 2013 })
RETURN order