MongoDB快速入门常用命令

网友投稿 598 2022-05-29

在工作室听闻老师要安排班上学生做 MongoDB 实训,身为工作室灌水王的我,整理了份 MongoDB 的学习入门资料,下面记录一下入门时经常使用到的mongoDB语句。

一、 关于 MongoDB

MongoDB 是开源文档数据库,是一个基于分布式文件存储的非关系型数据库。

MongoDB的基本概念是文档(document)、集合(collection)、数据库(database),文档是核心单元,像 {c:1} ; {s:“abcde”} 等,多个文档组成一个集合(相当于关系数据库的表)。

文档的数据结构和JSON基本一样,以 JSON 格式的文档保存数据。

所有存储在集合中的数据都是BSON格式,采用BSON存储文档数据。(BSON是一种类json的一种二进制形式的存储格式)

二、 安装 MongoDB

在浏览器输入localhost:27017 (MongoDB的端口号是27017),

查看是否连接成功。

MongoDB快速入门之常用命令

也可以在任务管理器用鼠标操作 启动 、关闭 。

三、 使用 MongoDB

创建数据库 (如果数据库名不存在,则创建;否则切换指定数据库)

use 数据库名

查看所有数据库

show dbs

查看当前数据库 (MongoDB默认的数据库为test,如果没有创建新的数据库,集合将存放在test数据库中)

db //刚创建的数据库并不在数据库列表中,要显示它,需要向该数据库中插入数据

删除数据库 (删除当前数据库)

db.dropDatabase()

创建集合

db.createCollection('name',options) //例如:db.createCollection('student')

查询数据库中所有集合

show collections

对集合重命名

db.旧名.renameCollection('new name')

删除集合

db.集合名.drop()

特点:

可以声明集合容量的大小。

插入数据时,新文档会被插到队列末尾,当队列被占满时,最老的文档会被覆盖。

适用于想要自动删除属性的地方(比如日志、记录等只需保留最近时间内的应用情景)。

写入速度快(不建立索引;写入磁盘上的固定空间,所以不会因为其他集合一些随机性的写入操作而中断)。

注意:

创建后不能更改,只能删除或重建。

固定集合不能转为普通集合。

不能进行分片,不能删除文档(可以删除整个集合)。

可以进行更新(update),但更新不能让文档的size发生变化。

创建固定集合

db.createCollection("name",{capped,size}) /*例如:创建固定集合AAA,大小限制为1024个字节,文档数量限制为100。 db.createCollection("AAA",{capped:true,size:1024,max:100}) */

普通集合转固定集合 (没有限制文档数量的参数,即没有max的参数选项)

db.runCommand({"convertToCapped":"集合名","size":字节大小}) /*例如:将col集合转换为一个大小为1024字节的固定集合。 db.runCommand({"convertToCapped":"col","size":1024}) */

判断是否为固定集合 (判断后显示true或者false)

db.集合.isCapped()

查看集合属性

db.集合.stats()

使用 insert() 或 save() 向集合中插入文档(如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档)。

两者的区别:

当插入重复数据时:若新增数据的主键已经存在,insert会提示异常,不保存当前数据;save则会对当前已经存在的数据进行修改操作。

批操作时:insert可以一次性插入;而save需要一个个地插入。

插入单个文档

db.集合名.insert({需要插入的内容}) //例如:db.stuinfo.insert({_id:001,name:'alice',age:18})

插入单个文档(先定义再插入)

//定义一个值,再插入这个值 /*例如:s={_id:5,name:'张三',age:19} db.stuinfo.insert(s) */

插入多个文档

db.集合名.insert([{内容},{内容}]) //例如:db.foo.insert([{_id:3,name:'yu',age:18},{_id:4,name:'en',age:19}]) // 不要漏掉中括号

插入多条数据

//让其自加,再插入 /*例如:for(var i=1;i<10;i++) db.col.insert({count:i,test2:false,test5:true}) */

使用 update() 和 save() 方法来更新集合中的文档。

两者的区别:

update更新文档

db.集合.update({旧的},{$set:{新的}}) /*例如:db.stuinfo.update({name:'curry'},{$set:{name:'王五'}}) (以上语句只会修改第一条发现的文档) 如果要修改多条相同的文档,则需要设置 multi 参数为 true,如下: db.stuinfo.update({name:'curry'},{$set:{name:'王五'}},{multi:true}) */

save更新文档

db.集合名.save({内容}) //例如:db.stuinfo.save({_id:2,name:'curry',age:20})

使用 remove(),deleteOne() 或 deleteMany() 方法移除集合中的数据。

删除全部文档 (可以在括号内加条件)

db.集合名.deleteMany({}) 或 db.集合名.remove({}) //例如:db.foo.deleteMany({'test5':true})

删除全部文档 (remove用法)

db.集合.remove(,{justOne: }) /* 参数query:可选,删除条件 参数justOne:可选,如果设为true或1,则只删除一条;默认为false 例如:只删除年龄为18的一条数据 db.foo.remove({'age':18},{justOne:1}) */

删除一个文档

db.集合名.deleteOne({}) //例如:db.foo.deleteOne({age:18})

查询文档 (可在括号内加查询条件)

db.集合名.find()

查询文档 (只查询第一条)

db.集合名.findOne()

查询文档 (格式化显示)

db.集合名.find().pretty()

多条件查询

// 在括号内加逗号分开条件 //例如:db.items.find({quantity:2,price:{$gte:4}})

等于

db.集合名.find({‘属性’:条件}) //例如:db.items.find({price:20})

小于 ($lt)

db.集合名.find({‘属性’:{$lt:条件}}) //例如:db.items.find({price:{$lt:5}})

小于或等于 ($lte)

db.集合.find({‘属性’:{$lte:条件}}) //例如:db.items.find({price:{$lte:5}})

大于 ($gt)

db.集合名.find({‘属性’:{$gt:条件}}) //例如:db.items.find({price:{$gt:5}})

大于或等于 ($gte)

db.集合.find({‘属性’:{$gte:条件}}) //例如:db.items.find({price:{$gte:10}})

不等于 ($ne)

db.集合.find({‘属性’:{$ne:条件}}) //例如:db.items.find({price:{$ne:20}})

使用 $in 或者 $nin 判断

db.集合.find({属性:{$in:[条件]}}) /*例如:查询年龄为18、19、20的学生。 db.stuinfo.find({'age':{$in:[18,19,20]}}) */

sort的用法(参数1为升序,-1为降序)

db.集合.find().sort({属性:参数}) /*例如:按照年龄升序排序。 db.stuinfo.find().sort({age:1}) 例如:按照年龄升序,主键降序排序。 db.stuinfo.find().sort({age:1,_id:-1}) */

查询指定数量的文档

db.集合.find().limit(数量) /*例如:查询2条信息。 db.stuinfo.find().limit(2) */

跳过指定数量的文档再查询

db.集合.find().skip(数量) /*例如:跳过2条数据再查询 db.stuinfo.find().skip(2) */

以上可以同时使用

//例如:db.stu.find().skip(5).limit(4)

文档通过一个或多个阶段(stage)组成管道,对管道进行分组、过滤等功能。

db.集合名.aggregate()

db.集合.aggregate([{$group:{_id:’id的名称’,’属性名’:{$sum:"$要统计的内容"}}}]) // 不要在要统计的内容前漏掉 $

使用聚合aggregate:

/*例如:统计price的总和 db.foo.aggregate([{$group:{_id:null,’总数’:{$sum:"$price"}}}]) 例如:通过产品类型分组,再统计卖出的数量 db.foo.aggregate([{$group:{_id:"$mold",total:{$sum:"$BBBB"}}}]) */

使用or语句(别漏掉中括号)

db.集合名.find({$or:[{key1: value1}, {key2:value2}]}) /*例如:查询AAA为10或价格大于等于5。 db.foo.find({$or:[{AAA:10},{price:{$gte:5}}]}) */

/*例如:查询AAA为“p003”且BBB为10或价格大于等于5的商品数据。 db.items.find({AAA:'p003',$or:[{BBB:10},{price:{$gte:5}}]}) */

/*例如:将相同的产品类型进行分组,统计各个产品数量,然后获取最大的数量。 db.items.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}},{$group:{_id:null,max:{$max:"$total"}}}]) */

统计集合中文档的数目 (可以在括号内加条件)

db.集合名.count() /*例如: db.foo.count() db.foo.count({sex:'man'}) */

distinct的用法去重 (不要用大括号把去重字段也括进去)

db.集合.distinct(‘去重字段’,{条件}) //例如: db.stuinfo.distinct('王五',{age:{$gt:29}})

另外,推荐下载Navicat来管理数据库,使用Navicat操作数据库比较友好。

MongoDB 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux Crontab:15 个很好用的 Cron 工作示例
下一篇:C Primer Plus 第02章 C语言概述 学习笔记及复习题、编程题解答
相关文章