尺寸函数中的模糊模式定义

时间:2018-03-13 17:10:33

标签: neo4j cypher

我使用下面的查询创建一个模块名列表作为行。作为列我想要基于表达式ABC和大小函数有几个计数。 - >大小([ABC])。在过去,我使用大括号来指定应选择Test类型的节点。

    MATCH (ireq:InternalRequirement)
    RETURN DISTINCT ireq.fullModuleName AS ModName,
    size([x IN collect(ireq) WHERE (x)<-[:TESTS]-(:Test {project: 'CustomerA', type: 'HIL'})
    AND x.reqLevel CONTAINS 'SW' | x.reqLevel]) as SW_Reqs_HIL

不幸的是,我的数据中项目的命名不是同质的(例如&#39; CustomerA_ext&#39;)。这就是为什么我需要一种更模糊的方法。我想在project-attribute上使用CONTAINS opperator。在正常的MATCH子句中,这没有问题,但在size-function中我得到一个错误:&#34; ts未定义&#34; 。我该如何定义它?或者是否有更好的解决方案来匹配多个属性与CONTAINS?

    MATCH (ireq:InternalRequirement)
    RETURN DISTINCT ireq.fullModuleName AS ModName,
    size([x IN collect(ireq) WHERE (x)<-[:TESTS]-(ts:Test)
    AND ts.project CONTAINS 'CustomerA'
    AND ts.type CONTAINS 'HIL'
    AND x.reqLevel CONTAINS 'SW' | x.reqLevel]) as SW_Reqs_HIL

1 个答案:

答案 0 :(得分:0)

下面的查询使用OPTIONAL MATCH来执行您可能想要的操作。

MATCH (ireq:InternalRequirement) 
OPTIONAL MATCH (ireq)<-[:TESTS]-(ts:Test)
WHERE
  ireq.reqLevel CONTAINS 'SW' AND
  ts.project CONTAINS 'CustomerA' AND
  ts.type CONTAINS 'HIL'
RETURN ireq.fullModuleName AS ModName, COUNT(ts) as SW_Reqs_HIL;

请注意,WHERE子句仅适用于前一个(OPTIONAL) MATCH