Nosql-neo4j-Cypher 语法

2022-09-12  本文已影响0人  Viterbi

目录: [TOC]

值和类型 Values and types

属性类型

属性类型有:

结构类型

结构类型有:

组合类型

组合类型有:

命名规则和建议命名规范 Naming rules and recommendations

命名规范

推荐命名规范

表达式 Expressions

一般表达式

case expression

case结构的条件表达式

简单的case形式,一个表达式多个变量

语法

CASE test
 WHEN value THEN result
  [WHEN ...]
  [ELSE default]END

例如:

MATCH (n)
RETURN
CASE n.eyes
WHEN 'blue'
THEN 1
WHEN 'brown'
THEN 2
ELSE 3 END AS resul

结果tresult
5 rows
2
1
3
2
1

一般的case形式,多个表达式多个变量

语法:

CASE
WHEN predicate THEN result
  [WHEN ...]
  [ELSE default]
END

例如

MATCH (n)
RETURN
CASE
WHEN n.eyes = 'blue'
THEN 1
WHEN n.age < 40
THEN 2
ELSE 3 END AS result


result
5 rows
2
1
3
3
1

区分简单case和一般的case形式

例如:

MATCH (n)
RETURN n.name,
CASE n.age
WHEN n.age IS NULL THEN -1
ELSE n.age - 10 END AS age_10_years_ago

结果:

Daniel 的结果并不是-1,
作为简单case 形式,Daniel应该事-1,
实际上, n.age是整形,而n.age IS NULL是布尔类型,所以n.age IS NULL THEN -1根本不会执行

正确写法:

MATCH (n)
RETURN n.name,
CASE
WHEN n.age IS NULL THEN -1
ELSE n.age - 10 END AS age_10_years_ago

参数 Parameters

Cypher支持参数查询,开发者就不用在在一个query中重新存储字符串,由于参数做了缓存,所以执行效率更高。 参数能够用于:

参数不能用于结构:

字符串常量

参数:
{
  "name" : "Johan"
}


查询:
MATCH (n:Person)
WHERE n.name = $name
RETURN n


MATCH (n:Person { name: $name })
RETURN n

正则表达式

参数:
{
  "regex" : ".*h.*"
}

查询:
MATCH (n:Person)
WHERE n.name =~ $regex
RETURN n.name

大小写敏感字符串匹配

参数:

{
  "name" : "Michael"
}

查询:
MATCH (n:Person)
WHERE n.name STARTS WITH $name
RETURN n.name

创建带属性的节点

参数:
{
  "props" : {
    "name" : "Andy",
    "position" : "Developer"
  }
}

查询:

CREATE ($props)

创建多个带属性的节点

参数:
{
  "props" : [ {
    "awesome" : true,
    "name" : "Andy",
    "position" : "Developer"
  }, {
    "children" : 3,
    "name" : "Michael",
    "position" : "Developer"
  } ]
}

查询:
UNWIND $props AS properties
CREATE (n:Person)
SET n = properties
RETURN n

设置节点的属性

参数
{
  "props" : {
    "name" : "Andy",
    "position" : "Developer"
  }
}

查询:
MATCH (n:Person)
WHERE n.name='Michaela'
SET n = $props

SKIP and LIMIT

参数:
{
  "s" : 1,
  "l" : 1
}

查询:
MATCH (n:Person)
RETURN n.name
SKIP $s
LIMIT $l

Node id

参数
{
  "id" : 0
}

查询:
MATCH (n)
WHERE id(n)= $id
RETURN n.name

多个节点id

参数:
{
  "ids" : [ 0, 1, 2 ]
}

查询:
MATCH (n)
WHERE id(n) IN $ids
RETURN n.name

调用程序

参数
{
  "indexname" : "My index"
}

查询:

CALL db.resampleIndex($indexname)

本文使用 文章同步助手 同步

上一篇 下一篇

猜你喜欢

热点阅读