图数据库neo4j介绍(5)——常用函数

常用函数

功能 描述
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
image.png

正则

(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])))

你可能感兴趣的:(图数据库neo4j介绍(5)——常用函数)