场景:一个简单的地址簿,用户可以在其中创建自己的联系人,并通过将它们分组添加来组织它们。联系人可能有多个地址。
我创建了以下图表: ![架构设计] [1]
我想查询放在x组中并居住在y国的所有联系人。
这种架构设计是否足以满足这些目的(我想使用neo4j数据库)?
答案 0 :(得分:3)
看起来country
的概念应该是图表中的头等公民,因为您的查询取决于它。图模型设计通常会受到查询模式的影响。
因此,我建议为每个国家/地区标记Country
节点,并将Address
节点与:LOCATED_IN
关系连接到该国家/地区。 (从而从国家/地区节点中删除国家/地区属性)。
通过该更改,您的查询就像以下一样简单:
MATCH (:Group{name:'family'})<-[:placed_in_group]-(contact)-[:lives-at]->()-[:LOCATED_IN]->(:Country{name:'US'})
RETURN contact
答案 1 :(得分:2)
正如stefan Armbruster所指出的,一种选择是从国家地址获得另一个节点。如果您不想更改数据结构,只需在字段中添加一个索引&#34; country&#34;地址然后你可以有一个查询
MATCH (:Group{name:'family'})<-[:placed_in_group]-(contact)-[:lives-at]->(:Address{country:'US'})