限制节点数

我正在查询存储建筑平板的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

上一篇: Limiting number of nodes

下一篇: wxPython: Catching key events globally