MongoDB、Neo4j数据库

一、MangoDB数据库

1.1 关系与非关系

1.1.1 关系型数据库

  • 关系型数据库

    • MySQL,Oracle, SQLServer, Access…
    • SQL(结构化查询语句)
  • 关系

    • 多对多:书与读者
    • 一对多:书与作者
    • 一对一:书与出版日期
  • 关系型数据库的问题:

    • 存储在硬盘上,读写慢;
    • 保持ACID难扩展。

1.1.2 非关系型数据库

  • 优点:

    • Nosql(Not Only SQL)
    • key:value
    • CAP → BASE
      • 一致性(Consistency):所有节点在同一时间具有相同的数据;
      • 可用性(Availability):保证每个请求不管成功或失败都有响应;
      • 分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作。
  • 缺点:

1.2 MongoDB简介

  • 非关系型数据库 Nosql
  • 文档存储:类json格式
  • 有机会对字段建立索引,实现关系数据库。

1.2.1 下载安装

1.3 常用命令

1.3.1 配置数据库目录

  • 运行 MongoDB 服务器:
    • mongodb -dbpath xxx
  • 连接MongoDB
    • mongo

1.3.2 删除数据库

  • 查看当前数据库:
    • show dbs
  • 切换数据库(如果没有,会自动创建):
    • use demo1
  • 往数据库中插入一条数据:
    • db.demo1.insert({“name”: “ 小红” })
  • 切换数据库:
    • use demo1
  • 删除数据库
    • db.dropDatabase()

1.3.3 集合

  1. 定义:集合相当于一张表, 集合可以有多个文档。

  2. 创建/查看/删除集合

  • 创建集合:
    • db.createCollection('collection1')
  • 查看已经创建的集合:
    • show collections
  • 删除集合:
    • db.collection1.drop()
  1. 文档
  • 文档是Mongodb中的基本但愿,相当于表中的一条记录,以json格式展示。

    • 插入/查看文档

      • 插入文档时,Mongodb自动创建集合:
        • db.collectionDemo.insert({"name":"hello"})
      • 查看插入的内容:
        • db.collectionDemo.find().pretty()
    • 插入复杂文档

      • 声明变量,插入文档:
document=({
  title:'MongoDB',
  by:'hogwarts',
  tags:['mongodb','database','NoSQL'],
})

db.collectionDemo.insert(document)
操作 格式 范例 RDBMS 中的类似语句
等于 {<key>:<value>} db.col.find({"by":"2"}).pretty() where by = '2'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({“likes”:{$gt:50}}).pretty()` where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
  • 修改和删除文档
    • 格式:
db.collection.update(
  <query>,
  <update>,
  {
    upsert:<boolean>,
    multi:<boolean>,
    writeConcern:<document>
}
)
  • 可选项:

    • upsert:如果不存在update的记录,是否插入,默认false;
    • multi:把按条件查出来多条记录全部更新,默认false;
    • writeConcern:抛出异常的级别。
  • 注意:update是替换,没有修改的字段会消失。

  • 修改单个文档

db.col.update({'title':'MongoDB'},
{'title':'MongoDB123'})
  • 修改多个文档
db.col.update({'name':'hello'},
{$set:{'name':'hello123'}},
{multi:true})
  • 删除单个文档

db.col.remove({'name':'hello123'})

  • 删除多个文档

db.col.remove({'name':'hello', 1})

1.3.4 修改操作符

  1. $inc
  • 语法:{$inc:{field:value}}
  • 作用:对一个数字字段的某个field增加value;
  • 示例:将name为xiaohong的学生的age增加5。
    db.students.update({'name':'xiaohong'}, {$inc:{age:5}})
  1. $set
  • 语法:{$set:{field:value}}
  • 作用:对文档中某个字段的field设置为value;
  • 示例:将name为xiaohong的学生的age设置为10。
    db.students.update({'name':'xiaohong'}, {$set:{age:10}})
  1. $unset
  • 语法:{$unset:{field:value}}
  • 作用:删除某个字段的field;
  • 示例:将chenzhou的年龄字段删除。
    db.students.update({'name':'chenzhou'}, {$unset:{age:1}})
  1. $push
  • 语法:{$push:{field:value}}
  • 作用:把value追加到field里。注意field只能是数组类型,如果field不存在,会自动插入一个数组类型。
  • 示例:将chenzhou添加别名Micheal。
    db.students.update({'name':'chenzhou'}, {$push:{"ailas":"Micheal"}})
  1. $rename
  • 语法:{$rename:{old_field_name:new_field_name}}
  • 作用:对字段重命名;
  • 示例:将name为xiaohong的学生的name字段重命名为hello。
    db.students.update({'name':'xiaohong'}, {$rename:{"name":"hello"}})

二、Neo4j数据库

2.1 简介

  • Neo4j是一个高性能的NoSQL图形数据库,它将结构化数据存储在网络上,而不是表中。

  • 其特点有:

    • 非关系型数据库;
    • NoSQL;
    • CQL;
    • 遵循SQL语法,简单且人性化。

2.2 安装与使用


  • 节点:


  • 添加属性:

  • 查询:

    • 检索节点的age属性;
      • MATCH需要与RETURN一起使用。
MATCH(XiaoHong:People)
RETURN XiaoHone.age
  • 检索节点的所有属性;
    • MATCH与RETURN不能单独使用。
MATCH(XiaoHong:People)
RETURN XiaoHong


  • 关系:
    • 创建关系;
      • CREATE(p1:Profile1)-[r1:LIKES]->(p2:Profile2)



  • 删除节点和关系:
    • 删除相应属性下的节点;
      • MATCH(e:People) DELETE e
    • 删除带有关系的节点;
      • MATCH(cc:Profile1)-[friends]->(c:Profile2)
      • DELETE cc,c,Friends


  • 删除属性:
match (book{title:"book1"})
remove book.price
return book

  • delete与remove
    • delete操作用于删除节点和关联关系;
    • remove操作用于删除标签和属性。

补充知识点

  • 删除标签:

    • MATCH (m:Movie)
    • REMOVE m:Picture
  • 排序:

    • MATCH (emp:Employee)
    • RETURN emp.empid,emp.name,emp.salary,emp.deptno
    • ORDER BY emp.name DESC
  • 更高级的查询:

    • MATCH (emp:Employee)
    • WHERE emp.name = 'Abc'
    • RETURN emp