【发布时间】:2014-09-04 12:41:35
【问题描述】:
我最近刚开始使用图形数据库和 Neo4j。我创建了具有以下标签的节点:Person、Company、City、Skill,它们之间具有一种或多种关系。
我正在尝试进行密码查询,以找到一个人节点(按节点 ID),然后我想找到与此人相关的所有技能、公司等。到目前为止,这是我的查询:
MATCH (person:Person)
WHERE ID (person) = 123
WITH person LIMIT 1
OPTIONAL MATCH (p:Person) - [:HAS_SKILL] -> (skill:Skill)
WHERE ID (p) = 123
WITH person, skill ORDER BY skill.name ASC
OPTIONAL MATCH (p:Person) - [:WORKED_AT] -> (company:Company)
WHERE ID (p) = 123
WITH person, skill, company ORDER BY company.name ASC
OPTIONAL MATCH (p:Person) - [:LIVES_IN] -> (city:City)
WHERE ID (p) = 123
WITH person
, collect(DISTINCT skill) as skills
, collect(DISTINCT company) as companies
, city LIMIT 1
RETURN person, skills, companies, city
我担心这并不是一个真正的最佳查询,如果/当我们得到几百万个节点时,它看起来会很慢。有人可以告诉我构建这种查询的更好方法吗?我应该把它分成几个较小的查询吗?
【问题讨论】: