如何在neo4j中编写or with not查询

问题描述 投票:0回答:1

我想在 neo4j 中执行此查询,但我没有得到正确的结果。

NOT((服务提供_由阿达尼传输有限公司和服务地址_福尔摩沙)或服务取决于视频采访数据)

密码查询

MATCH (node:service )-[provid_by]->(dst:provider)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["adani transmission limited"]) OR size(names) = 0
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service )-[address_in]->(dst:Address)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["formosa"]) OR size(names) = 0
WITH DISTINCT node
MATCH (node:service)-[depen_on]->(dst:res)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["video interview data"]) OR size(names) = 0
WITH DISTINCT node
WITH DISTINCT node
ORDER BY node.createdAt DESC
RETURN DISTINCT node
UNION
MATCH (node:service) WHERE NOT (node)-[:provid_by]->(:Participant)
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service)
WHERE NOT (node)-[:address_in]->(:Address)
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service)
WHERE NOT (node)-[:depen_on]->(:res)
WITH DISTINCT node
RETURN DISTINCT node
neo4j cypher
1个回答
0
投票
  1. 前 3 个

    MATCH
    子句在关系类型前面没有使用冒号。例如,
    [provid_by]
    应该是
    [:provid_by]
    。这可能会或可能不会导致结果的差异,但它会减慢查询速度。

  2. 另一个问题,也是一个大问题,是

    UNION
    只能向最终结果添加行。它无法过滤掉其他
    UNION
    术语提供的任何行。

  3. 此外,还不清楚为什么你有最后 3 个

    UNION
    。他们只会添加大量不符合您规定标准的节点。

这个更简单的查询可能就足够了:

MATCH (node:service)
WHERE
 (
   NONE(n IN [(node)-[:provid_by]->(dst:provider)|dst.name] WHERE n =~ "(?i)Adani Transmission Limited") OR
   NONE(n IN [(node)-[:address_in]->(dst:Address)|dst.name] WHERE n =~ "(?i)Formosa")
 ) AND
 NONE(n IN [(node)-[:depen_on]->(dst:res)|dst.name] WHERE n =~ "(?i)Video interview data")
RETURN node
ORDER BY node.createdAt DESC
© www.soinside.com 2019 - 2024. All rights reserved.