如何查询 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账号会使用其他设备,关联其他账号
我的问题是:
在这种情况下它是一个好的模型吗?
有了这个模型,如何找到与账户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
我是研究图形数据库的新手(使用 Neo4j),我正在为我的项目建模。业务规则是我们需要存储他们使用的用户和设备,这是我目前的模型:
账户 A 使用设备 D:(Account A) -[USED]-> (Device D)
账户 B 也使用设备 D:(Account B) -[USED]-> (Device D)
=>
(Account A) -[USED]-> (Device D) <-[USED]- (Account B)
以后B账号会使用其他设备,关联其他账号
我的问题是:
在这种情况下它是一个好的模型吗?
有了这个模型,如何找到与账户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