Neo4j:Cypher - 从列表中计算空值数

时间:2015-11-09 07:40:50

标签: neo4j cypher

我有一个动态密码,它读起来像这样。

MATCH (n {company_id: 105, company_site_id:555,level:0})   
OPTIONAL MATCH(n1 {company_id:105, company_site_id:555,name:"price"}) 
OPTIONAL MATCH(n2 {company_id:105, company_site_id:555,name:"quote"})  
RETURN 
   n.company_id , 
   CASE WHEN n1.name IS NOT NULL THEN n1.name 
        WHEN n1.name IS  NULL THEN          
       'None'       
   END AS n1name, 
   n1.property, 
   CASE WHEN n2.name IS NOT NULL THEN n2.name 
        WHEN n2.name IS  NULL THEN 
       'None' 
   END AS n2name, 
   n2.property

密码的目标:

动态构建的密码,用于验证某些节点的存在。如果节点存在,则返回其他名称'无'。

我的要求:

我想要一种方法来检查其值为'无' 。

在上面的示例中,我有2列/节点(n1,n2),我需要计算'无'。

非常感谢任何指针。

感谢。

2 个答案:

答案 0 :(得分:1)

你的公司节点上没有标签吗?使用标签应该更容易做到。

我认为你应该简单地匹配" null"在你的Where子句中,你只需要返回一个count():

MATCH (n {company_id: 105, company_site_id:555,level:0})
OPTIONAL MATCH(n1 {company_id:105, company_site_id:555,name:"price"})
WHERE
    n1.name is null 
WITH n1
OPTIONAL MATCH (n2 {company_id:105, company_site_id:555,name:"quote"})
WHERE
    n2.name is null
RETURN 
    count(n1) as n1s, count(n2) as n2s

使用Labels,你可以这样做(假设使用的标签是Company):

Match (c:Company) 
WHERE c.name IS NULL
RETURN
    count(c)

答案 1 :(得分:1)

您的数据模型真的很尴尬吗? 不应该通过关系将n1和n2连接到n而不是复制所有数据吗?

MATCH (n:Company {company_id: 105, company_site_id:555,level:0})   
OPTIONAL MATCH(n1:Company {company_id:105, company_site_id:555,name:"price"}) 
OPTIONAL MATCH(n2:Company {company_id:105, company_site_id:555,name:"quote"})  
RETURN 
   n.company_id , 
   coalesce(n1.name,'None') as n1name,
   n1.property, 
   coalesce(n2.name,'None') as n2name,
   n2.property
   sum(case n1.name when null then 1 else 0) + 
   sum(case n2.name when null then 1 else 0) as null_names