MongoDB基础--Mio

一、简介

在关系型数据库中,表的设计完成后,不能改动,因此在项目开发过程中,很被动。因此使用非关系型数据库MangoDB,表的结构可以改变。
BSON:增强版JSON,可以存储二进制数据。
在这里插入图片描述

二、安装及启动

  1. 版本说明,偶数为稳定版,例如3.2,3.4。
  2. 配置环境变量,将mongo安装包的bin目录添加到path里。4.x版本后不需要此操作。
  3. 启动,在cmd输入 mongod,启动服务器。
  4. 将MongoDB设为系统服务,开机自动启动。
    注意: 4.x版本不需要此项操作

设置系统服务步骤
在这里插入图片描述
mongod.cfg文件的内容:在这里插入图片描述

systemLog:
  destination: file
    path: c:\data\log\mongod.log
storage:
  dbPath: c:\data\db

cmd执行的命令

sc.exe create MongoDB binPath= "\"D:\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

三、概念

3.1 MongoDB 结构

在这里插入图片描述

  • 类比关系型数据库
    在MongoDB中数据库database表示一个数据库,集合collection相当于关系型数据库的表,文档document相当于关系型数据库的一行记录.文档document是以二进制json的形式存储在数据库中的,是我们直接操作的对象.

3.2 结构关系图

在这里插入图片描述

3.3 cmd命令

数据库和文档无需手动建立

在这里插入图片描述

  • 显示所有数据库show dbs

  • 对某各数据库进行操作use 数据库名

  • 当前数据库db

  • 显示数据库中所有集合show collections

  • 查询当前集合所有文档db.集合名.find()

四、数据库增删改查(CRUD)操作

4.1 插入文档

  • 使用db.集合名.insertOne()向集合中添加一个文档,参数一个json格式的文档

  • 使用db.集合名.insertMany()向集合中添加多个文档,参数为json文档数组

  • 使用db.集合名.insert()向集合中添加一个或多个文档
    在这里插入图片描述

// 向stus集合中添加一个文档
db.stus.insertOne(
   { name: "mio", age: 10 , size: { h: 160, w: 50 }}
)
// 向stus集合中添加多个文档
db.stus.insertMany([
  { name: "mio", age: 10 , size: { h: 160, w: 50 }},
  { name: "mio2", age: 10 , size: { h: 160, w: 50 }},
  { name: "mio3", age: 10 , size: { h: 160, w: 50 }}
])
  • 插入2000条文档
    方式一:执行插入插座2000次

    for(var i=1;i<=2000;i++){
        db.number.insert({num:i})
    }
    

    方式二:一次性插入2000条记录

    var arr = [];
    for(var i=1;i<=2000;i++){
        arr.push({num:i});
    }
    db.number.insert(arr);
    

4.2 查询文档

1.按条件查询
  • 查询操作符
    在这里插入图片描述

  • 查询集合中符合条件的所有文档:使用db.集合名.find()

    #在stus中查询所有文档
    db.stus.find() 
    

    在这里插入图片描述

  • 查询集合中符合条件的所有文档:使用db.集合名.find({属性:值})

    #在stus中按姓名查询 
    db.stus.find({name:'mio'}) 
    

    在这里插入图片描述

  • 使用db.集合名.find({属性:值, 属性:值})方法对集合进行查询

    #在stus中按姓名和年龄查询 
     db.stus.find({name:'mio',age:18}) 
    

    在这里插入图片描述

  • 查询集合中符合条件的第一条文档对象:使用db.集合名.findOne({属性:值})

    #在stus中按姓名查询 
    db.stus.findOne({name:'mio'}) 
    

    在这里插入图片描述

  • find返回的是一个数组,可以用[ 0 ] 表示要取的第几条记录

    # 取一个元素
    db.stus.find({name:'mio'})[0]
    

    在这里插入图片描述

  • findOne返回的是一个对象,可以直接.属性名

    db.stus.findOne({name:'mio'}).name
    

    在这里插入图片描述

  • 查询有多少个文档,db.集合名.find().count()

    db.stus.find().count()
    

    在这里插入图片描述

  • 在number(集合名)中查值大于500的文档

    db.number.find({num:{$gt:500}})
    
  • 在number(集合名)中查值大于1900,小于1999的文档

    db.number.find({num:{$gt:1990,$lt:1999}})
    
  • 在number(集合名)中查值大于1900或者小于1999的文档

    db.number.find({$or:[{num:{$gt:1990}},{num:{$lt:20}}]})
    
  • 查询number前十条数据,limit()设置显示上限

    db.number.find().limit(10)
    
  • 查询number11到20条数据,skip()用于跳过指定数量的数据

    db.number.find().skip(10).limit(10)
    
2.将查询结果排序
  • db.集合名.find().sort(属性:条件,属性:条件),按属性进行排序,条件值为1表示升序,为-1表示降序。可指定多个排序规则

    db.number.find().sort({num:1})
    
3.仅显示部分属性
  • db.集合名.find({ },{ 属性值:1})find里两个对象,第一个表示查询条件,第二个表示想显示的字段。1表示显示,0表示不显示,

    db.stus.find({},{name:1,_id:0})
    

4.3 修改文档

  • 如果要修改属性,需要‘修改操作符’来完成修改
  • $set:修改文档中指定属性
  • $unset:删除文档指定属性
  • $push:向数组中添加一个元素
  • $addToSet:向数组中添加一个元素,该元素必须是数组中没有的,set中元素不能重复
  • $inc:在原来基础上增加
1.修改属性
# 将collection中将文档按'属性1'的条件1查询
# 然后将"属性2","属性3"的值修改
db.集合名.updateOne(
    { "属性1": 条件1 },
    {
        $set: { "属性2": 条件2, "属性3": 条件3},
    }
)
# 将name名为‘mio’的人的年龄改成66
db.stus.update({name:'mio'},{$set:{age:66}})

结果图:在这里插入图片描述

2.删除属性
# 将collection中将文档按'属性1'的条件1查询
# 然后将"属性2"值删除
db.集合名.updateOne(
    { "属性1": 条件1 },
    {
        $unset: { "属性2": 1},
    }
)
# 将name为mio的age属性删除
db.stus.update({name:'mio'},{$unset:{age:1}})

结果图:
在这里插入图片描述

  • 使用db.集合名.updateOne(<filter>, <update>, <options>)方法修改一个匹配条件的文档

  • 使用db.集合名.updateMany(<filter>, <update>, <options>)方法修改所有匹配条件的文档

    注意: updateMany将符合条件的全部修改

    db.集合名.updateMany(
        { "属性1": 条件1 },
        {
            $set: { "属性2": 条件2},
        }
    )
    
    db.stus.updateMany({name:'mio'},{$set:{age:66}})
    

    如图:将name为mio的两条记录的age都修改为66

    在这里插入图片描述
    注意: update有个参数,可设置为修改多个还是一个;update默认只修改一个,如果有多个符合条件的,只修改第一个

    db.集合名.updateOne(
        { "属性1": 条件1 },
        {
            $set: { "属性2": 条件2, "属性3": 条件3},
        },
        {
        	multi:True
        }
    )
    
    db.stus.update({name:'mio'},{$set:{age:66}},{multi:true})
    

如图:将name为mio的两条记录的age都修改为88

在这里插入图片描述

  • 使用db.集合名.replaceOne()方法替换除属性1外的所有属性,其<update>参数应为一个全新的文档.
3.内嵌文档

当一个文档的属性是文档时,我们称这个属性为内嵌属性。
新增一个文档为hobby的的文档:

db.stus.update({name:'mio2'},{$set:{hobby:{cities:['beijing','shanghai'],movies:['hero']}}})

在这里插入图片描述
MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档可以通过·的形式来匹配,但属性必须使用引号。

db.stus.find({'hobby.movies':'hero'})

namemiomovies里新增一个电影,使用数组修改操作符‘$push’

db.stus.update({name:'mio2'},{$push:{'hobby.movies':'haha'}})

结果图:
在这里插入图片描述
namemiomovies里新增一个电影,使用数组修改操作符‘$addToSet’

db.stus.update({name:'mio2'},{$addToSet:{'hobby.movies':'haha'}})

结果会添加失败,因为该数组中已经有haha

4.4 删除文档

注意:一般数据库数据不会真正删除,通常情况会添加一个字段‘isDelete’,默认为0,即没有删除;若想要删除该条数据时,将‘isDelete’修改为1。在显示的时候,添加一个条件,{isDelete:0}

  • db.集合名.remove()可以删除一个或多个符合条件的文档,默认删除多个。remove()第二个参数设置为true,则只会删除一个。

    # 此时会删除所有名字是mio的文档
    db.stus.remove({name:mio})
    # 此时会删除一个名字是mio的文档
    db.stus.remove({name:mio},true)
    

    结果图: 在这里插入图片描述

  • db.集合名.deleteOne()可以删除一个符合条件的文档。

  • db.集合名.deleteMany()可以删除多个符合条件的文档。

  • db.集合名.remove({}),清空集合,性能略差

  • db.集合名.drop(),删除集合

  • db.dropDatabase(),删除数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值