在Neo4j中使用WHERE子句在节点之间创建关系并使用ID [英] Creating relationships between nodes with WHERE clause and using ID in Neo4j

查看:787
本文介绍了在Neo4j中使用WHERE子句在节点之间创建关系并使用ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个名为Room(4)和Houses(4)的节点.它们是通过以下方式创建的:

I have two nodes named Room(4) and Houses(4). They have been created in the following way:

CREATE (n:Room { code: 1})
CREATE (n:Room { code: 1})
CREATE (n:Room { code: 1})
CREATE (n:Room { code: 1})

CREATE (n:House { code: 1})
CREATE (n:House { code: 2})
CREATE (n:House { code: 3})
CREATE (n:House { code: 4})

这些是我试图在节点之间创建的一些关系

These are some of the relations that i am trying to create between the nodes

MATCH (room:Room), (house:House{code:1})
WHERE id(room) = 40
CREATE UNIQUE (room)-[:PLACED_IN]->(house) ;
MATCH (room:Room), (house:House{code:2})
WHERE id(room) = 41
CREATE UNIQUE (room)-[:PLACED_IN]->(house) ;
MATCH (room:Room), (house:House{code:3})
WHERE id(room) = 42
CREATE UNIQUE (room)-[:PLACED_IN]->(house) ;

该ID之前尚未定义,因此它应该基于ID创建新房间,还是我应该在创建时手动添加ID,因为当前由于WHERE子句而无法建立关系?

The ID's have not been defined before so it should be creating new rooms based on ID's or should i add the ID's manually while creating as currently the relationships are not being created due to WHERE clause?

推荐答案

将查询更改为:

// match room by internal id
MATCH (room:Room)
WHERE id(room) = 40
// merge will create a relationship between `room.id = 40`
// and `house.code = 1`. If `house.code = 1` does not exists, it will be created
MERGE (room)-[:PLACED_IN]->(:House {code:1}) ;
MATCH (room:Room)
WHERE id(room) = 41
MERGE (room)-[:PLACED_IN]->(:House {code:2}) ;
MATCH (room:Room)
WHERE id(room) = 42
MERGE (room)-[:PLACED_IN]->(:House {code:3}) ;

一些提示:

CREATE UNIQUE.改为使用MERGE.

这篇关于在Neo4j中使用WHERE子句在节点之间创建关系并使用ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆