在我的数据库中有控制器和设备。它们之间有两种连接,一种是直接逻辑连接,一种是通过电缆节点的物理连接。
A)逻辑连接非常简单,控制器和设备通过名为“ logicalConn”的连接进行简单连接。
B)物理连接比较棘手。控制器是CTRL_ENDP(端点)节点的父级,而设备是DEV_ENDP节点的父级。这些端点然后与CABLE节点连接。 CABLE节点有两种连接类型:源连接和目标连接。
这里是一个例子:
________________[:logicalConn]__________________
/ \
/ \
/ \
CONTROLLER DEVICE
\ /
[:parentOf] [:parentOf]
\ /
CTRL_ENDP --- [:src] --- CABLE --- [:tar] --- DEV_ENDP
我需要做什么? 因此,在理想情况下,每个控制器都通过物理和逻辑连接连接到特定设备。但是我需要确定是否确实如此! 所以我需要两个查询:
1)如果未逻辑连接(仅是物理连接),则首先查询应与控制器和设备一起返回。
2)第二个查询应该返回相同的值,只是这次是相反的,因此当它们不是物理连接时,仅是逻辑连接。
如果可以将上述两个查询压缩为一个查询,这也很好,但是对于一个更简单的解决方案,也许我们应该如上所述地进行两个查询。
如果有人可以帮助我,我将不胜感激!
编辑:
其他信息:
答案 0 :(得分:0)
我们可以使用指定的模式来确定两个节点之间是否存在这样的路径,将其解释为布尔值,然后在return中输出:
我假设您正在通过id参数查找:DEVICE和:CONTROLLER节点,让我们使用$ devId和$ conId作为输入参数:
MATCH (c:CONTROLLER {id:$conId}), (d:DEVICE {id:$devId})
WITH exists((c)-[:logicalConn]-(d)) as logicallyConnected,
exists((c)-[:parentOf]-()-[:src]-()-[:tar]-()-[:parentOf]-(d)) as physicallyConnected
RETURN logicallyConnected, physicallyConnected
对于给定的模式,我们感兴趣的只是结构,在这种情况下是关系类型。如果您不想遍历的关系类型可能存在不同的带标签节点,那么您可能需要将标签添加到路径中的节点占位符,否则关系类型应该就足够了。