首页 > 解决方案 > NEO4j中匹配3个条件的AND子句

问题描述

我的查询是:

MATCH (n:TemplateForm)-[r:DEFINED_BY]-(m:ProjectForm)-[s:CONNECTED]-(b:ProjectPage)-[p:CONNECTED]-(d:ProjectField) 
WHERE Id(n) = 907318 
  AND b.name = "REPORT PHOTOS - COVER AND APPENDICES" 
  AND NOT (d.type IN (['imageArray','image','barSeparator','map'])) 
  AND (d.name) IN(["Photo 5 Description:"]) 
  AND (d.value) IN (["penthouse roof"]) 
RETURN d

我有 3 个字段 - 照片 6 描述:”、“照片 7 描述:”、“照片 5 描述:在 d.name 中,我在 d.value - 顶层公寓屋顶”、“房子”、“农舍”中给它们 3 个值我得到结果 - 只要值匹配,我就会得到所有行。如果在照片 7 描述中我有阁楼,我仍然得到它,结果我想要的是如果只有在照片 6 描述中我有阁楼,在照片 7 描述中我有房子在照片 5 描述中,我有农舍,那么只有这个才能得到满足

标签: neo4j

解决方案


如果我理解正确,您想要所有:projectFields 具有以下条件的节点:

  • name = "照片 5 描述:" and value = "farmhouse"
  • name = "照片 6 描述:" 和 value = "阁楼屋顶"
  • 名称=“照片7描述:”和价值=“房子”

或类似的东西。所有其他似乎都在起作用的条件。

我担心您的域的建模,但由于这不是您的问题,我将把我的考虑留给我。

我会尝试这样的事情:

MATCH (n:TemplateForm)-[r:DEFINED_BY]-(m:ProjectForm)-[s:CONNECTED]-(b:ProjectPage)-[p:CONNECTED]-(d:ProjectField) 
WHERE Id(n) = 907318 
    AND b.name = "REPORT PHOTOS - COVER AND APPENDICES" 
    AND NOT (d.type IN ['imageArray','image','barSeparator','map']) 
    AND (
        (d.name = "Photo 6 Description:" AND d.value = "penthouse roof") 
        OR (d.name = "Photo 7 Description:" AND d.value = "house")
        OR (d.name = "Photo 5 Description:" AND d.value = "farmhouse")
    )
RETURN d

通过这种方式,它应该返回所有:projectFields符合这些条件之一的,所有其他组合都将被排除在外。

我可能理解错了,如果是这样,我很抱歉。

我需要建议的一件事是至少添加关系方向以提高性能。


推荐阅读