logo头像
ICQL

mongodb

MongoDB

  • 一个跨平台的,面向文档的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型
  • 适合存储的数据
    • (1)数据量大
    • (2)写入操作频繁
    • (3)价值较低

MongoDB体系结构

  • 文档(document),相当于关系数据库中的一行记录
  • 集合(collection),相当于关系数据库的表
  • 数据库(database),多个集合逻辑上组织在一起,就是数据库
  • 一个 MongoDB 实例支持多个数据库
    MongoDB体系结构
    MongoDB与MySQL数据库逻辑结构概念的对比

MongoDB安装

1
2
3
4
5
#docker安装
docker run -di -p 7120:27017 --name=db-mongo mongo

#进入容器
docker exec -it db-mongo /bin/bash

MongoDB使用

  • 数据类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #基本数据类型
    #1、null:用于表示空值或者不存在的字段
    {"x":null}

    #2、布尔型:布尔类型有两个值true和false
    {"x":true}

    #3、数值:shell默认使用64为浮点型数值
    {"x":3.14}或{"x":3}
    #对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数)
    {"x":NumberInt("3")}{"x":NumberLong("3")}

    #4、字符串:UTF-8字符串都可以表示为字符串类型的数据
    {"x""呵呵"}

    #5、日期:日期被存储为自新纪元依赖经过的毫秒数,不存储时区
    {"x":new Date()}

    #6、正则表达式:查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同
    {"x":/[abc]/}

    #7、数组:数据列表或数据集可以表示为数组
    {"x": ["a""b","c"]}

    #8、内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理
    {"x":{"y":3 }}

    #9、对象Id:对象id是一个12字节的字符串,是文档的唯一标识
    {"x": objectId() }

    #二进制数据:二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式

    #代码:查询和文档中可以包括任何JavaScript代码
    {"x":function(){/…/}}
  • 常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #数据库,集合命名不要出现 - 

    #登录容器,输入mongo进入mongo命令行操作

    #选择和创建数据库
    use 数据库名称//use db

    #插入文档:主键是_id,如果不输入,则会自动创建,其类型是ObjectID类型
    db.集合名称.insert(数据)//db.collection.insert({_id:"1",content:"内容"})

    #查询集合
    db.集合名称.find()//db.collection.find()

    #条件查询
    db.collection.find({_id:"1"})
    #返回符合条件的第一条文档
    db.collection.findOnd({_id:"1"})
    #返回指定条数
    db.collection.find({_id:"1"}).limit(2)

    #修改文档
    db.集合名称.update(条件,修改后的数据)//db.collection.update({_id:"1"},{content:"内容修改"})

    #删除文档
    db.集合名称.remove(条件)

    #统计条数
    db.集合名称.count(条件)

    #模糊查询,正则表达式,/模糊查询字符串/
    db.collection.find({content:/^内容/})//查询以内容开头

    #大于 小于 不等于
    db.集合名称.find({ field : { $gt: value }}) // 大于: field > value
    db.集合名称.find({ field : { $lt: value }}) // 小于: field < value
    db.集合名称.find({ field : { $gte: value }}) // 大于等于: field >= value
    db.集合名称.find({ field : { $lte: value }}) // 小于等于: field <= value
    db.集合名称.find({ field : { $ne: value }}) // 不等于: field != value

    #包含与不包含
    db.collection.find({_id:{$in:["1"]}})

    #条件连接and
    db.collection.find({$and:[ {_id:{$gte:1}} ,{content:"内容"}]})

    #条件连接or
    db.collection.find({$or:[ {_id:{$gte:1}} ,{content:"内容"}]})

    #列值增长
    db.collection.update({_id:"1"},{$inc:{visits:NumberInt(1)}} )

java 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//官方驱动pom依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb‐driver</artifactId>
<version>3.6.3</version>
</dependency>

//测试程序
public static void main(String[] args) {
MongoClient client = new MongoClient("192.168.184.134");//创建连接
MongoDatabase spitdb = client.getDatabase("spitdb");//打开数据库
MongoCollection<Document> spit = spitdb.getCollection("spit");//获取集合
FindIterable<Document> documents = spit.find();//查询记录获取文档集合
for(Document document:documents){ //
System.out.println("内容:"+ document.getString("content"));
System.out.println("用户ID:"+document.getString("userid"));
System.out.println("浏览量:"+document.getInteger("visits"));
}
client.close();//关闭连接
}


//使用 SpringDataMongoDB 操作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

@Repository
public interface SpitRepository extends MongoRepository<Spit, String> {
Page<Spit> findByParentid(String parentid, Pageable pageable);
}

微信打赏

赞赏是不耍流氓的鼓励