0

我是学习图形数据库的新手(使用 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 的所有关联账户?

谢谢你的帮助。

4

1 回答 1

0

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

至于找出与 :Account a 关联的其他帐户(仅考虑使用同一设备的链接),简单的查询应该可以解决问题。假设我们在图中有 :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

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

MATCH (:Account {name:'A'})-[:USED]->(device)<-[:USED]-(other:Account)
RETURN other, collect(device) as sharedDevices
于 2018-08-21T06:49:20.623 回答