如何重构neo4j中的数据

时间:2014-03-04 15:34:53

标签: neo4j cypher

假设我有一个带有订单节点的数据库,如下所示

Order{OrderId, Customer, Date, Quantity, Product}

现在我想在数据库中重构此节点,使用密码查询

进行如下所示
(day)<-[:PLACED_ON]-(Order{OrderId, Quantity})-[:PLACED_BY]->(customer), (Order)-[:FOR_PRODUCT]->(product)

我知道我们实际上可以直接在cypher中执行此类操作,而无需将所有节点加载到我的代码中,然后对数据库进行多个cypher调用。

是否有可能帮助我了解如何在不引入客户,产品和日节点重复的情况下完成此类重构。

Rrgards 基兰

1 个答案:

答案 0 :(得分:0)

是的,您可以使用cypher操作Neo4j数据库。

猜测您当前的Order节点类似于:

CREATE (:ORDER {orderId:100,customer:'John',date:13546354,quantity:1,product:'pizza'})

您可以写下以下内容:

MATCH (o:ORDER) 
CREATE (d:DAY{timestamp:o.date}) <- [:PLACED_ON] - o - [:PLACED_BY] -> (c:CUSTOMER{name:o.customer})
CREATE o - [:FOR_PRODUCT] -> (p:PRODUCT{name:o.product}) 
REMOVE o.product, o.customer, o.date 
RETURN o as order, d as day, c as customer, p as product

查询输出为:

Nodes created: 3
Relationships created: 3
Properties set: 6
Labels added: 3

请注意,如果您拥有大型数据集,迁移整个数据库可能非常耗时!您可能想尝试2.1.0里程碑版本中的PERIODIC COMMIT功能。