neo4j - 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 描述中,我有农舍,那么只有这个才能得到满足
解决方案
如果我理解正确,您想要所有: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
符合这些条件之一的,所有其他组合都将被排除在外。
我可能理解错了,如果是这样,我很抱歉。
我需要建议的一件事是至少添加关系方向以提高性能。
推荐阅读
- php - 在 WooCommerce 帐户激活邮件中访问用户的名字(DOI 通过 WooCommerce Germanized)
- java - 为参数化变量创建 shell 脚本
- python - OSError: [Errno 9] 错误的文件描述符
- ansible - 与主机的共享连接已关闭
- c - C语言中的Do-While无限循环
- sympy - sympy - UnevaluatedExpr 和可交换属性 - 保持浮点数不被评估
- html - SVG 在屏幕绘制时闪烁大
- python - 在 validate_operand 中出现错误“传递了一个 {obj}”.format(obj=type(obj))
- scala - Scala-Lang 推荐的导入语句样式:package._ 还是 package.ClassName?
- jquery - 如何使用jquery中的按钮更改字体大小,它位于“vw”而不是“px”