对比了3个主流开源图数据库:Neo4j/JanusGraph和HugeGraph的一些特性,共比较了30多个指标,包括生态、功能、性能、工具链等维度。
Cypher支持的数据类型有:数值型、字符型、布尔型、节点、关系、路径、映射(map)和列表(list)。
计算表达式的值,然后依次与 WHEN 语句中的表达式进行比较,直到匹配上为止。如果未匹配上,则ELSE中的表达式将作为结果。如果 ELSE 语句不存在,那么将返回 null。
语法:
CASE test
WHEN value THEN result
[WHEN ...]
[ELSE default]
END
参数:
test:一个有效的表达式。
value:一个表达式,它的结果将与 test表达式的结果进行比较。
result: 如果 value 表达式能够与 test表达式匹配,则它将作为结果表达式。
default:没有匹配的情况下的默认返回表达式。
查询:
MATCH (n)
RETURN
CASE n.eyes
WHEN 'blue'
THEN 1
WHEN 'brown'
THEN 2
ELSE 3 END AS result
结果:result:
2
1
3
2
1
5 rows
按顺序判断断言,直到找到 true 为止,然后对应的结果被返回。如果没有找到,就返回 ELSE的值。如果没有 ELSE 语句,则返回 null。
语法:
CASE
WHEN predicate THEN result
[WHEN ...]
[ELSE default]
END
参数:
predicate:判断的断言,以找到一个有效的可选项。
result:如果predicate 匹配到,result 就作为结果表达式。
default:没有匹配到情况下,默认返回表达式。
查询:
MATCH (n)
RETURN
CASE
WHEN n.eyes='blue'
THEN 1
WHEN n.age <40
THEN 2
ELSE 3 END AS result
结果: result:
2
1
3
3
1
5 rows
参数:
{
"name":"Johan"
}
我们可以通过如下两种查询方式来使用参数
查询方式1:
MATCH (n)
WHERE n.name = "Johan"
RETURN n
查询方式2:
MATCH (n { name: "Johan" ))
RETURN n
参数:
{"regex”: ".*h.*"}
查询:
MATCH (n)
WHERE n.name =~ ".*h.*"
RETURN n.name
在Neo4j的Cypher查询语言中,=~
是用于执行正则表达式匹配的操作符。
=~ ".*h.*"
表示正则表达式的匹配模式。这个模式包含以下元素:
.*
: 表示匹配零个或多个任意字符。h
: 表示匹配字母 "h"。因此,.*h.*
表示匹配包含字母 "h" 的任意字符串。
参数:
{"name": "Michaelw"}
查询:
MATCH (n)
WHERE n.name STARTS WITH "Michaelw"
RETURN n.name
参数:
{"props":{"name":"Andres",
"position":"Developer"
}
}
查询:
create({"props":{"name":"Andres",
"position":"Developer"
}
})
参数:
{"props":[{
"awesome": true,"name":"Andres"
"position":"Developer"
},{"children":3,"name": Michael","poaltion":"peveloper"}]
}
查询
UNWIND $ props As properties
CREATE (n:Peraon)
SET n = Propert1es
RETURN n
参数:
{"props":{"name" :"Andres",
"position” :“Developer"}
}
查询:
MATCH (n)
WHERE n.name='Michaela'
SET n= $ props
参数:
{"s”:1
"l":1}
查询:
MATCH (n)
RETURN n.name
SKIP $s
LIMIT $l
参数:
{"id”:0}
查询:
MATCH (n)
WHERE id(n)= $id
return n.name
参数:
{"ids":[0,1,2 ]}
查询:
MATCH (n)
WHERE id(n) IN $ids
RETURN n.name
Cypher语言,用双斜线//来注释行
累了,先发出来,后边抽空再写。
未完待续。。。。。。。