zoukankan      html  css  js  c++  java
  • Neo4j 学习笔记1

    初学者,项目暂时用不到,纯粹为了好奇。

    Cypher语句:

    (1)创建节点:

    create (p:person{name:"贾宝玉",sex:"",age:"16",hobby:"女孩子"})
    create (p:person{name:"林黛玉",sex:"",age:"14",hobby:"葬花"})
    create (p:person{name:"贾政",sex:"",age:34,hobby:"装正经",prof:"工部员外郎"})

    (2) 查询节点

    match (p1:person{name:"贾宝玉"}),(p2:person{name:"贾政"}) return p1,p2

    //根据id 查找节点
    match (p1:person) where id(p1)=20 return p1

    删除节点:

    //删除全部person标签节点
    match (person) delete m

    (3) 创建关系

    match (p1:person{name:"贾宝玉"}),(p2:person{name:"贾政"}) create (p1)-[r:SON]->(p2) return p1,p2

     感觉方向有点别扭,需要删除关系,重新创建

    (4) 删除关系

    //删除所有关系为SON的关系
    match p=()-[r:SON]->() delete r
    
    //删除两个节点之间的关系
    match (n1:person),(n2:person)
    where n1.name="贾宝玉" AND n2.name="贾政"
    optional match (n1)-[r]-(n2)
    delete r
    
    //删除两个节点之间的指定关系
    match (p1),(p2) where p1.name="贾宝玉" and p2.name="贾政" optional match (p1)-[r:SON]-(p2) delete r
    
    //删除某个节点所有关系(方向不影响)
    match (p1:person{name:"贾政"})-[r]-() delete r
    match (p1:person{name:"贾宝玉"})-[r]-() delete r
    
    //删除节点和节点所有关系
    match (p1:person{name:"贾宝玉"})-[r]-() delete p1,r
    
    //删除所有拥有关系的节点和关系(注意:无关系节点不会删除) 
    match (m:person)-[r]-() delete m,r
    
    //删除所有节点,(注意:删除节点时,如果该节点有关系,必须先删除关系才可以删除节点,否则报错)
    match (m:person) delete m

    重新创建:

    match (p1:person{name:"贾宝玉"}),(p2:person{name:"贾政"}) create (p1)-[r:父亲]->(p2) return p1,p2
    match (p1:person{name:"贾宝玉"}),(p2:person{name:"林黛玉"}) create (p1)-[r:表妹]->(p2) return p1,p2
    match (p1:person{name:"贾政"}),(p2:person{name:"林黛玉"}) create (p1)-[r:外甥女]->(p2) return p1,p2
    match (p1:person{name:"贾政"}),(p2:person{name:"贾宝玉"}) create (p1)-[r:儿子]->(p2) return p1,p2
    match (p1:person{name:"林黛玉"}),(p2:person{name:"贾宝玉"}) create (p1)-[r:表哥]->(p2) return p1,p2
    match (p1:person{name:"林黛玉"}),(p2:person{name:"贾政"}) create (p1)-[r:舅舅]->(p2) return p1,p2

    (4)merge :有则返回,没有创建,而create 不管有没,都创建

    match (p1:person{name:"贾宝玉"}),(p2:person{name:"贾政"}) merge (p1)-[r:怕]->(p2) return p1,p2
    match (p1:person{name:"贾宝玉"}),(p2:person{name:"贾政"}) merge (p1)-[r:父亲]->(p2) return p1,p2

     (5) 更新标签:

    match (p1:person) where id(p1)=20 set p1:female return p1
    
    match (p1:person) where id(p1)=0 or id(p1)=21 set p1:male return p1

     更新属性,给黛玉添加性格特征:

    match (p1:person) where p1.name="林黛玉" set p1.character="多愁善感,说话尖酸,小嫉妒" return p1

     添加两条黛玉、宝玉互喜欢关系

    match (p1:person{name:"林黛玉"}),(p2:person{name:"贾宝玉"}) create (p1)-[r:喜欢]->(p2) return p1,p2
    match (p1:person{name:"林黛玉"}),(p2:person{name:"贾宝玉"}) create (p2)-[r:喜欢]->(p1) return p1,p2

    给关系添加属性,如desc

    match (p1),(p2) where p1.name="林黛玉" and p2.name="贾宝玉" optional match (p1)-[r:喜欢]-(p2) set r.desc="痴情" return p1,p2
    match (p1),(p2) where p1.name="林黛玉" and p2.name="贾宝玉" optional match (p2)-[r:喜欢]-(p1) set r.desc="多情" return p1,p2

    注意:这里没有箭头,所以两条喜欢的关系描述最终都是多情。

    match (p1),(p2) where p1.name="林黛玉" and p2.name="贾宝玉" optional match (p1)-[r:喜欢]->(p2) set r.desc="痴情" return p1,p2
    match (p1),(p2) where p1.name="林黛玉" and p2.name="贾宝玉" optional match (p2)-[r:喜欢]->(p1) set r.desc="多情" return p1,p2

     (6)索引:

    创建语法:create index on :<标签名> (属性名)

    create index on :person(name)

    删除语法:drop index on :<标签名> (属性名)

    drop index on :person(name)

    创建唯一约束索引

    create constraint on(p:person) assert(p.name) is unique

     删除唯一约束索引

    drop constraint on(p:person) assert(p.name) is unique

    (7) 多维度关系查询

    查询之前,需要造点数据:Neo4j 3.4.4之后支持浏览器创建多条语句

    create (m:mobile{no:"15171052716",brand:"华为"});
    create (m:mobile{no:"18771054371",brand:"小米"});
    create (m:mobile{no:"13287562316",brand:"oppo"});
    
    match (p1:person),(m1:mobile) where p1.name="贾宝玉" and m1.no="18771054371" create (p1)-[r:拥有]->(m1) return p1,m1;
    match (p1:person),(m1:mobile) where p1.name="林黛玉" and m1.no="13287562316" create (p1)-[r:拥有]->(m1) return p1,m1;
    match (p1:person),(m1:mobile) where p1.name="贾政" and m1.no="15171052716" create (p1)-[r:拥有]->(m1) return p1,m1;
    
    match (m1:mobile),(m2:mobile) where m1.no="13287562316" and m2.no="18771054371" create (m1)-[r:Call{count:40}]->(m2) return m1,m2;
    match (m1:mobile),(m2:mobile) where m1.no="13287562316" and m2.no="18771054371" create (m2)-[r:Call{count:20}]->(m1) return m1,m2;
    match (m1:mobile),(m2:mobile) where m1.no="15171052716" and m2.no="18771054371" create (m1)-[r:Call{count:5}]->(m2) return m1,m2;

    结果:

     查询1:注意:关系无箭头

    match (p:person)-[r1:`拥有`]->(m1:mobile)-[r2:Call]-(m2:mobile) where p.name="贾宝玉" return p,m1,m2 limit 4

     查询2:注意关系有箭头

    match (p:person)-[r1:`拥有`]->(m1:mobile)-[r2:Call]->(m2:mobile)-[r3:`拥有`]-(p2:person) where p.name="贾宝玉" return p,m1,m2,p2 limit 10

    如果不指定关系,直接用 []

     查询3:利用关系查询

     match (p:person)-[r:`怕`]->() return p

    查询4:正则查询 (注意时.*号)

    match (p1:person) where p1.name=~'贾.*' return p1 limit 10

     查询5:包含查询

    match (p1:person) where p1.name contains '' return p1 limit 10
  • 相关阅读:
    XTU1199:Number Game
    SSL连接建立过程分析(1)
    JavaScript高级编程II
    PreferenceFragment 使用 小结
    crm使用soap更改下拉框的文本值
    POJ2241——The Tower of Babylon
    四个好看的CSS样式表格
    无论你在哪里上班,请记住下面黄金法则!
    js的for in循环和java里的foreach循环的差别
    具体解释EBS接口开发之物料导入API
  • 原文地址:https://www.cnblogs.com/xiaozhuanfeng/p/12304160.html
Copyright © 2011-2022 走看看