如何查询 Neo4j 中的所有关联(所有级别)?

How to query all association (all level) in Neo4j?

我是研究图形数据库的新手(使用 Neo4j),我正在为我的项目建模。业务规则是我们需要存储他们使用的用户和设备,这是我目前的模型:

账户 A 使用设备 D:(Account A) -[USED]-> (Device D)

账户 B 也使用设备 D:(Account B) -[USED]-> (Device D)

=>

(Account A) -[USED]-> (Device D) <-[USED]- (Account B)

以后B账号会使用其他设备,关联其他账号

我的问题是:

  1. 在这种情况下它是一个好的模型吗?

  2. 有了这个模型,如何找到与账户A关联的所有账户?

谢谢你的帮助。

是的,这个模型有效,因为图中的 :Account 和 :Device 节点是不同的。

至于找出与 :Account a 关联的其他帐户(仅考虑使用同一设备的 link),简单的查询应该可以解决问题。假设我们在图表中有 :Account(name),并且有一个索引(用于按名称快速查找 :Account 节点),我们可以使用这个:

MATCH (:Account {name:'A'})-[:USED]->()<-[:USED]-(other:Account)
RETURN DISTINCT other

如果 :USED 关系总是传入 :Device 节点,我们可以将其简化为:

MATCH (:Account {name:'A'})-[:USED*2]-(other:Account)
RETURN DISTINCT other

如果我们还需要两个连接的帐户节点之间共用的设备,我们可以将其作为两个 linked 帐户之间的节点集合包括在内:

MATCH (:Account {name:'A'})-[:USED]->(device)<-[:USED]-(other:Account)
RETURN other, collect(device) as sharedDevices