AND 子句用于匹配 NEO4j 中的 3 个条件

AND clause for matching 3 conditions in NEO4j

我的查询是:

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 描述我有农舍那么只有这个应该得到满足

如果我没理解错的话,您希望所有 :projectFields 节点都满足以下条件:

  • name = "照片 5 描述:" and value = "农舍"
  • name = "照片 6 描述:" and value = "penthouse roof"
  • name = "照片 7 描述:" and value = "house"

或类似的东西。所有其他似乎有效的条件。

我很关心你域的建模,但因为这不是你的问题,所以我会把我的考虑留给我。

我会尝试这样的事情:

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

以这种方式,它应该 return 所有符合这些条件之一的 :projectFields,所有其他组合将被排除。

我可能理解错了,如果是的话我很抱歉。

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