0

我正在尝试找出如何从查询中排除节点。我的图表由用户、技能、技能评分、问题和 endo 组成

  • 用户有技能
  • 技能有与问题相关的得分((技能)-->(得分)-->(问题))
  • endo 是用户和技能评分的关系 ((user)-->(endos)-->(scorings))

我想为用户找到所有问题,但排除用户已经结束关系的那些问题

我以为我可以这样做:

MATCH (u:`User`),
  u<-[rel1:`USERS`]-(s:`Skill`),
  s-[rel2:`SKILLS`]->(k:`SkillScoring`),
  k-[rel3:`ANSWER`]->(q:`Question`),
  u<-[rel4:`ENDO`]-(e:`Endo`)

WHERE NOT((e)-->(u)) AND (u.id='1')

RETURN u, e, k, q

更新:

endo节点是这样连接的。

  • 蓝色是用户节点
  • 紫色是日记背书节点(创建于)
  • 绿色是技能评分节点

事实上,关系“ENDORSEMENT”有一个节点(已记录),它连接技能评分节点

内向关系

更新:

当我执行此查询时,它会返回与用户有关的问题

MATCH (u:User),
  u<-[rel1:USERS]-(s:SoftSkill),
  s-[rel2:SOFT_SKILLS]->(k:SkillScoring),
  k-[rel3:ANSWER]->(q:Question),
  u<-[:ENDO]-()<-[:ENDO]->(k)  
WHERE u.id='1'
RETURN q, u

通过 cons 当我执行此查询以排除问题时,查询返回我的问题,但也有我不想要的问题

MATCH (u:User),
  u<-[rel1:USERS]-(s:SoftSkill),
  s-[rel2:SOFT_SKILLS]->(k:SkillScoring),
  k-[rel3:ANSWER]->(q:Question)
WHERE u.id='1' AND NOT u<-[:ENDO]-()<-[:ENDO]->(k)
RETURN q, u

怎么了?有什么建议么?

谢谢

4

1 回答 1

1

您的查询首先说与u:ENDO关系e,然后与e没有关系u,但那不可能。

在您想要排除的情况下,endo 节点如何与评分/问题相关联?你能试试像

MATCH (u:User)-[rel1:USERS]->(s:Skill)-[rel2:SKILLS]->(k:SkillScoring)-[rel3:ANSWER]->(q:Question)
WHERE u.id = '1' AND NOT u<-[:ENDO]-()-[:??]->k

并在关系类型中填写??endo 节点(()上面的匿名节点)是如何连接的?

如果您愿意,可以在http://console.neo4j.org创建一个示例图,这将有助于明确您的意图。

此外,可以在标签和关系周围使用反引号,但除非它们包含空格或其他一些不常见的字符,否则您不需要这样做。

于 2015-10-06T09:12:05.870 回答