如何使用MERGE创建或重用部分模式?

时间:2018-08-08 04:26:54

标签: neo4j cypher

我有带有多个REVIEW节点的PRODUCT节点。如果产品不存在,我将创建节点PRODUCE,然后与REVIEW绑定。

例如,我想要一个PRODUCE节点{name:'X phone'},其REVIEW为3,{content:'有史以来最好的手机'},{content:'有史以来最差的手机'},{content:'nope'} 。

我尝试过

首先,对每个REVIEW使用一个密码MERGE。

[Thu Aug 09 09:49:25.365878 2018] [core:error] [pid 32484] [client 127.0.0.1:52662] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://produk.adev.co.id/

它不起作用,将创建3个PRODUCT {name:'X phone'}

我试图使用MERGE来创建/重复使用该产品,他们进行了MATCH + MERGE评论。 (每个评论2个密码)

MERGE(product:PRODUCT{name:'X phone'})-[:RATE]-(review:REVIEW{content:'best phone ever'})

MERGE(product:PRODUCT{name:'X phone'})-[:RATE]-(review:REVIEW{content:'worst phone ever'})

MERGE(product:PRODUCT{name:'X phone'})-[:RATE]-(review:REVIEW{content:'nope'})

第二个解决方案有效,它仅创建1个PRODUCT并将3个REVIEW连接到该PRODUCT。但是,我必须使用两倍的密码。

我想问问我的问题是否有更好的方法?

解决方案

我不知道我可以将MERGE与MERGE链接

感谢@MạnhQuyếtNguyễn的答案,我可以为每个带有2个MERGE子句的评论样本做1个密码。如果不存在,则首先进行MERGE创建产品,如果不存在,则进行第二次MERGE创建审阅。

// create/reuse PRODUCT
MERGE(product:PRODUCT{name:'X phone'})  
// create/reuse review
MATCH (product:PRODUCT{name:'X phone'}) MERGE (product)-[:RATE]-(review:REVIEW{content:'nope'})

// create/reuse PRODUCT
MERGE(product:PRODUCT{name:'X phone'})  
// create/reuse review
MATCH (product:PRODUCT{name:'X phone'}) MERGE (product)-[:RATE]-(review:REVIEW{content:'best phone ever'})

// create/reuse PRODUCT
MERGE(product:PRODUCT{name:'X phone'})  
// create/reuse review
MATCH (product:PRODUCT{name:'X phone'}) MERGE (product)-[:RATE]-(review:REVIEW{content:'worst phone ever'})

1 个答案:

答案 0 :(得分:1)

您随后的匹配/合并是多余的。您可以这样做:

// create/reuse PRODUCT
MERGE (product:PRODUCT {name:'X phone'})  
MERGE (product)-[:RATE]-(:REVIEW {content:'nope'})
MERGE (product)-[:RATE]-(:REVIEW {content:'best phone ever'})
MERGE (product)-[:RATE]-(:REVIEW {content:'worst phone ever'})