一文搞懂MongoDB

简介

什么是MongoDB

MongoDB是一个基于分布式文件存储的NoSQL数据库,基于C++语言开发而成的。它以文档存储格式(BSON)为基础,是由字段和值对组成的数据结构。

扩展:

BSON(Binary JSON)是一种二进制表示的JSON格式。它与JSON类似,是一种文本的数据交换格式。相比JSON,BSON具有以下优势:

  • 二进制表示的JSON格式,使存储相同数据时,BSON需要的字节数更少,利于大规模数据的存储和传输;

  • 支持更多数据类型;

  • 支持嵌套文档和数组的表示,可更灵活地组织和表示复杂的数据结构。

MongoDB的逻辑结构

  • 数据库(database):一个仓库,里面存放集合。

  • 集合(collection):类似于数组,在集合中可以存放文档。

  • 文档(document):文档数据库中的最小单位,存储和操作的内容都是文档。

Mongo数据类型

基本操作

在MongoDB中,数据库和集合不需要手动创建。当创建文档时,如果文档所在的集合或数据库不存在,数据库会自动创建!

基本指令

(1)查看当前所有数据库列表:show dbs/databases

(2)进入到指定的数据库: use 数据库名

注意:MySQL需先创建数据库才能使用,而MongoDB可直接使用use命令来指定一个并不存在的数据库。

(3)查询当前所处的数据库:db 

(4)显示我们数据库中所有的集合:show collections 

(5) 清屏:cls

CRUD操作

插入操作

(1)插入一个文档到集合中:db.collection.insertOne({field:value})

(2)插入多个文档到集合中:db.collection.insertMany([{field:value}])

(3)插入一个或多个文档到集合中:db.collection.insert()

注意:

  • 向集合中插入文档时,没有给文档指定_id属性,则数据库会自动给文档添加_id,_id属性用来作为文档的唯一标识;

  • _id属性可自己指定,但必须确保唯一性,如果人为指定则数据库就不会再添加了。

(4)批量添加两万条数据的性能高,尽量少调用系统的方法

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

查询操作

(1)查询集合中的数据:db.collection.find()  

注意:查询后的结果默认按照_id的值进行升序排列

(2)限制查询返回结果的数量:limit(Integer id)

(3)排序查询结果:sort({field: [1|-1] })

    文档对象参数需用一个属性来指定排序规则;排序规则1表示升序,-1表示降序

(4)跳过指定数量的数据:skip(Integer id)    

扩展:

(1)分页功能实现一般使用skip函数和limit函数。

skip( (页码-1)*每页显示的条数 ).limit(每页显示的条数) 

(2)MongoDB中skip、limit、sort无论怎么组合使用,执行顺序都是sort>skip>limit;

(5)条件查询:find({field: value})

    查询满足条件的一条数据:findOne({field: value}) 

(6)指定查询条件和返回字段:find(field: value}, {field: [0|1])

    第二个参数用于设置查询结果的投影,属性对应的值1表示返回字段,0表示不返回字段如果没指定属性_id不返回,则数据库会自动返回_id。

投影结果指定排除某些字段:比如返回sex字段以外的所有字段

扩展:

find方法的第二个参数对多个属性进行操作:

两处报错说明:

(1)MongoServerError:Cannot do exclusion on field sex in inclusion projection(属性sex不能在包含的投影中做排斥)

(2)MongoServerError: Cannot do inclusion on field sex in exclusion projection(属性sex不能在排除的投影中做包容)

(7)比较两个数:$gt大于,$lt小于,$eq等于,$gte大于等于,$lte小于等于。

(8)查询某个字段的值是否在数组中:$in在,$nin不在

(9)判断某个字段是否存在:$exists  

$exists对应的值0或false表示不存在,1或true表示存在。

 

$exists只用于查询某个字段是否存在,不能用于查询某个字段值是否存在

(10)复杂查询:and、or、not

    1)逻辑与:$and: [{field: value}, {field: value}] 

        与逻辑与结果一致更简便的写法如下:

    2)逻辑或:$or: [{field: value}, {field: value}]

    3)逻辑非:$not: {field: value}

(11)正则表达式:$regex: /表达式/

(12)忽略大小写:$options: “i”

(13)统计文档数量:db.collection.countDocuments()

(14)统计查询数据的数量:db.collection.find().count()

(15)查询表中属性去重后的数据:db.collection.distinct(field)

更新操作

(1)更新数据:

  • 更新满足条件的一条数据:updateOne({field: value}, {field: value}) 

  • 更新满足条件的多条数据:updateMany({field: value}, {field: value})

  • 更新满足条件的一条或多条数据:updateMany({field: value}, {field: value})

注意:第一个参数用于找要更新的对象;第二参数表示要更新的文档对象的值。如果更新的字段不存在,则数据库会自动创建这个字段。

(2)用来修改文档中的指定属性:$set: {field: value}

​(3)用来删除文档的指定属性:$unset: {field: value}

(4)用于向数组中添加一个新的元素:$push(可重复添加)

(5)向数组中添加一个新元素:$addToSet(不可重复添加)

(6)替换一个符合条件的文档对象:db.collection.replaceOne({field:value}, {field:value})

第一个参数是查询条件用于找要替换的对象;第二参数表示替换后的对象。

扩展:

  • MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是文档时,我们称这个文档为内嵌文档

  • MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过 . 的形式来匹配,且属性名必须使用引号(双引号单引号都行)。比如:db.users.find("hobby.movies":"hero")。

删除操作

(1)删除数据 

删除满足条件的一条数据:deleteOne({field:value})

删除满足条件的多条数据:db.collection.deleteMany({field:value}) 

(2)删除数据库的集合:db.collection.drop()  

如果最后一个集合没了,数据库也就没了!

(3)删除当前所在数据库 :db.dropDatabase() 

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值