常用函数
功能 | 描述 |
---|---|
UPPER | 它用于将所有字母更改为大写字母。 |
LOWER | 它用于将所有字母改为小写字母。 |
SUBSTRING | 它用于获取给定String的子字符串。 |
REPLACE | 它用于替换一个字符串的子字符串。 |
聚集函数 | 描述 |
COUNT | 它返回由MATCH命令返回的行数。 |
MAX | 它从MATCH命令返回的一组行返回最大值。 |
MIN | 它返回由MATCH命令返回的一组行的最小值。 |
SUM | 它返回由MATCH命令返回的所有行的求和值。 |
AVG | 它返回由MATCH命令返回的所有行的平均值。 |
取字符串
match(n:hero) return substring(n.name, 0,2), n.name
计数
match(n:hero) return count(n)
Neo4j无 group by
Match (n:Person) return count(*)
Match (n:Person) return avg(n.age) 只包含age不为空的node
shortestPath 查询最短路径
应用理论:6层关系理论:任何两个事物之间的关系都不会超过6层
查询最短路径的必要性
allShortestPaths
[*..n] 用于表示获取n层关系
match p = shortestpath((:hero{name:"孙尚香"})-[*..3]-(:hero{name:"武则天"})) return p
match p = allshortpath((:hero{name:"孙尚香"})-[*..3]-(:hero{name:"武则天"})) return p
正则
(n)-->(m)
Relationship from n to m.
(n)-[*1..5]->(m)
Variable length path of between 1 and 5 relationships
from n to m.
collect
查询如下3个表的全部内容:哪些公司卖哪些货?
MATCH (s:Supplier)-->(:Product)-->(c:Category)
RETURN s.companyName as Company, collect(distinct c.categoryName) as Categories
collect(distinct c.categoryName) 单独对c.categoryName去重
数据导入
1.load
LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/products.csv" AS row
CREATE (n:Product)
SET n = row,
n.unitPrice = toFloat(row.unitPrice),
n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder),
n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")
2.import
将csv文件放到import目录中
// 将hudong_pedia.csv 导入
LOAD CSV WITH HEADERS FROM "file:///hudong_pedia.csv" AS line
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})
3.用python接口导入文件
import json
from py2neo import Node ,Graph,Relationship
直接用pandas读取文件,或者用json解析数据,用NODE创建节点,用find_one读取节点,用relation创建关系
g=Graph("http://localhost:7474",
username="neo4j",
password="012464998")
g.run("MATCH (n) OPTIONAL MATCH (n)-[r]-()DELETE n,r")
with open("属性.json","r",encoding='utf-8')as f:
da = f.readlines()
# print(da[1])
for i in range(len(da)):
data = eval(da[i])
shuxing = [i for i in data.keys()]
# print(shuxing)
sx_zhi= [i for i in data.values()]
# print(sx_zhi[-1])
temp = Node("shiti",name=str(shuxing[-1]),property=str(sx_zhi[-1]))#,des=str([sx_zhi[-1]])
# g.create(temp)
with open("关系.txt",'r',encoding='utf-8')as f:
da = f.readlines()
for i in da:
k = i.strip("\n").split(" ")
print(k[0])
rel = Relationship(g.find_one(label="shiti",property_key='name',property_value=str(k[0])),str(k[1])
,g.find_one(label="shiti",property_key='name',property_value=str(k[2])))