我有一个动态密码,它读起来像这样。
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),我需要计算'无'。
非常感谢任何指针。
感谢。
答案 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