限制节点数
我正在查询存储建筑平板的Neo4j数据库。 查询的一个例子是:
MATCH (s:STOREYVERTEX) <-- (room0: LIVING)
MATCH (s) <-- (room1: DINING)
MATCH (s) <-- (room2: KITCHEN)
MATCH (room0) - [edge0: DOOR] -> (room2)
MATCH (room2) - [edge1: DOOR] -> (room1)
RETURN s
现在这返回所有具有与约束对应的子图的图。 我想以某种方式限制结果图所具有的节点数量,因此对于给定的示例,我只想得到只有3个节点的所有类型的ROOM。
有没有办法在Cypher中做到这一点?
编辑:像这样的东西不起作用:
MATCH (s:STOREYVERTEX) <-- (rooms:ROOM)
WITH s, count(distinct(rooms)) as numberOfRooms
WHERE numberOfRooms = 3
MATCH (s) <-- (room1: DINING)
MATCH (s) <-- (room2: KITCHEN)
MATCH (room0) - [edge0: DOOR] -> (room2)
MATCH (room2) - [edge1: DOOR] -> (room1)
RETURN s
是的,你可以这样做,就像这样:
MATCH (s:STOREYVERTEX) <-- (rooms:ROOM)
WITH s, count(distinct(rooms)) as numberOfRooms
WHERE numberOfRooms = 3
RETURN s;
这只是检查有多少个不同的房间连接到STOREYVERTEX
,并且只返回3的s
值。
你没有在你的查询中指定DOOR
内容,但是你应该能够从这里修改这个查询来获得你想要去的地方。
首先,您可以将所有房间标记为ROOM。 因此,当您创建一个新的厨房节点时,您可以将其标记为厨房和客厅:
CREATE (a:KITCHEN:ROOM {...})
现在,您可以将标签添加到现有节点,如下所示:
MATCH (room:Kitchen) SET room :ROOM return room
Congratz,现在你所有的厨房节点也是房间节点!
这样,您可以将该节点当作厨房,当您需要厨房时,或者当您需要时,将其作为普通房间使用。 如果你这样做了相关的所有节点(生活,餐饮,...),那么你可以做一些事情:
MATCH (s:STOREYVERTEX)-[r]-(room: ROOM)
WITH s, count(r) as rel_count
WHERE rel_count = 3
RETURN s
这将使节点'具有3个关系(不管rel的类型是什么)返回到具有标签ROOM的任何节点。
终于解决了我的问题是:
MATCH (s:STOREYVERTEX) <-- (rooms)
WITH s, count(distinct(rooms)) as numberOfRooms
WHERE numberOfRooms = 3
MATCH (s) <-- (room1: KITCHEN)
MATCH (s) <-- (room2: DINING)
RETURN s
链接地址: http://www.djcxy.com/p/87115.html