MongoDB的学习

简介

关系型数据库里面全都是表
MongoDB是非关系型数据库(NOT ONLY SQL)
MongoDB也是文档型数据库,里面的数据模型是面向文档的,文档是一种类似JSON的结构,即MongoDB中全是增强版的JSON结构
先配置环境变量
在这里插入图片描述
在这里创建一个放数据的目录
在这里插入图片描述
这里另外用cmd输入mongo正式今日mongodb数据库

mongodb需要两步启动的解释

数据库可分为两部分:

  • 数据库服务器:用于储存数据
    mogod用于启动服务器
  • 数据库客户端:客户端用于操作服务器,对数据进行增删改查操作
    mongo用于启动客户端

所以要先启动服务器才能用客户端
在这里插入图片描述
这就是客户端,一个mongo shell

基本概念

  • 文档(document) 在MongoDB中每条数据都是一个文档,是MongoDB中的最小单位,存储和操作的内容都是文档,增删改查都是文档
  • 集合(collection) 集合是一组文档,也就是集合用来存放文档的;集合中存放的文档可以是各种各样的,没有形式要求
  • 多个文档组成集合,多个集合组成数据库
  • 在MongoDB中,集合和数据库都不需要手动创建,当我们创建文档时,如果文档所在集合或数据库不存在,会自动创建数据库和集合

基本操作

  • 查看数据库
    在这里插入图片描述
  • 进入指定数据库use 数据库名称
    在这里插入图片描述
    自动创建并进入了数据库test
  • db查看当前所处数据库
    在这里插入图片描述
  • 查看数据库中的集合
    在这里插入图片描述
    这里数据库中没有集合

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

doc代表document

  • 向数据库中插入文档
  1. db.collection.insert(doc) 向集合中插入一个文档 collection处是集合名
    例子:向test数据库中stus集合插入一个新的学生对象
    {name:“张三”,age:18,gender:“男”}
    在这里插入图片描述
  • 查询 db.collection.find() 查询当前集合中的所有文档
    在这里插入图片描述

插入文档(使用图形化操作界面)

  • db.collection.insert() 向集合中插入一个或多个文档
    在这里插入图片描述
  • 插入多个数据
db.stus.insert([
    {name:"tangseng",age:39,gender:"male"},
    {name:"xiaowang",age:39,gender:"male"},
    {name:"xiaoli",age:39,gender:"male"}
])

在这里插入图片描述
从结果可知多了一行_id
当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id,_id作为文档的唯一标识
ObjectId()自动生成当前id
在这里插入图片描述
_id作用是确保文档的唯一性。即确保数据的唯一性
_id可以以自己指定,数据库不会再给我们添加,也必须确保唯一性
在这里插入图片描述

  • db.collection.insertOne()插入一个文档对象
  • db.collection.insertMany()插入多个文档对象

这两个比insert()会清晰一点,但用哪个都行

查询文档

查询通用操作为 db.collection.find()

  • find()用于查询集合中所有符合条件的文档
  • find()可以接受一个对象作为条件参数 {} 表示查询集合中所有文档
    在这里插入图片描述
    {属性:值} 查询属性是指定值的文档
    具体用法:查询_id的值为1的文档
db.stus.find({_id:1})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

db.collection.findOne()

用于查询集合中符合条件的第一个文档,前面的find()是有几个就查几个
在这里插入图片描述
findOne()返回的就是一个文档对象

而find()返回的是一个数组,

可以用中括号取值,比如[0]取第一个
在这里插入图片描述
而findOne()可以用.属性名来取值
在这里插入图片描述
find()不可以这样做,因为是数组

mongodb支持直接通过内嵌文档的属性值进行查询

db.test2.insert({
    name:"liu",
    hobby:{
        movies:['movie1','movie2'],
        cities:['zhuhai','chengdu']
    }
    });

在这里插入图片描述
或者用查询db.test2.find({"hobby.movies":'movie1'})
在这里插入图片描述

.count可用于查询所有结果的数量

在这里插入图片描述
插入100条数据

for(var i=0;i<100;i++){
    db.users.insert({username:'data'+i}) 
}
db.users.find().count()//100

length()也可实现类似效果

在这里插入图片描述
但length()和count()内部是不一样的,习惯使用count()

查询操作符

比较操作符

  • $gt 大于
  • $gte 大于等于
  • $lt 小于
  • $lte 小于等于
  • $ne 不等于
  • $eq 等于的另一种写法

文档的修改

替换:db.collection.update(查询条件,新对象)
原数据如下:
在这里插入图片描述

把tangseng的年龄改成10

db.stus.update({name:"tangseng"},{age:10});

在这里插入图片描述
重新看集合中文档数据:
在这里插入图片描述
就只剩age有数据
这是因为update()默认会使用新对象替换旧对象

修改操作符

修改操作符:修改指定的属性,而不是替换

  • $set 可用于修改文档中的指定属性
    在这里插入图片描述
    在这里插入图片描述

可以见到name:"shazeng"已经加进去了
在这里插入图片描述

  • $unset 可以用来删除文档的指定属性
    在这里插入图片描述
    这里address后跟什么值都可以,删除的是address这个属性

注意update默认只改一个

在这里插入图片描述

同时修改多个符合条件的文档

db.collection.updateMany()
在这里插入图片描述

修改一个符合条件的文档

db.collection.updateOne()
和默认情况一样

但其实update()也可以修改多个

db.stus.update(
    {"name" : "zhubajie"},
    {
        $set:
            {      
                address:"hahaha"
            }    
    },
    {
        multi:true
    }
            
);

在这里插入图片描述

替换一个文档

db.cpollection.replaceOne() 用于替换一个文档

文档的删除

  • db.collection.remove()
  • db.collection.deleteOne()
  • db.collection.deleteMany()
    数据准备如下:
    在这里插入图片描述

删除id为1的文档

remove()根据条件来删除文档,传递条件的方式和find()一样

db.stus.remove({_id:1});

在这里插入图片描述
在这里插入图片描述
注意: remove()默认情况会删除符合条件的所有文档

remove()删除一个文档的方法

如果remove() 第二个参数传递一个true,则只会删除一个
删除第一个age为39的文档

db.stus.remove({age:39},true);

在这里插入图片描述

remove({})会删除所有

空对象作为参数会删除集合中所有文档
清空集合,但性能差,因为是一个个删(先匹配再删除)

若要删除数据,则最好的方法是在数据中多加一个字段来表示该数据是否被删除,而不是真的删除数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值