MongoDB数据库—基本操作
文章目录
- 一、数据库操作
- 1. 查看所有数据库
- 2. 创建数据库
- 3. 删除数据库
- 4. 查看当前正在使用的数据库
- 5. 断开连接
- 6. 查看命令api
- 二、集合操作
- 1. 查看当前数据库下有哪些集合
- 2. 创建集合
- 3. 删除当前数据库中的集合
- 三、文档操作
- 1. 插入文档:insert()和save()
- 2. 文档更新
- 3. 文档删除
- 4. 文档查询
- 5. 查询条件操作符
- 6. 条件查询:and和or
- 7. limit和skip
- 8. 排序
一、数据库操作
1. 查看所有数据库
我们可以使用如下语句查看MongoDB中所有的数据库,如下:
> show dbs
admin (empty)
local 0.078GB
2. 创建数据库
格式如下:
use database_name
注意:
- 如果数据库不存在则创建数据库,否则切换到指定的数据库
- 如果刚刚创建的数据库不在列表内,如果要显示它,我们需要向刚刚创建的数据库中插入一些数据
例如:
> show dbs
admin (empty)
local 0.078GB> use school
switched to db school
3. 删除数据库
格式:
db.dropDatabase()
注意:前提条件是正在使用当前数据库
例如:
> use school
switched to db school> db.dropDatabase()
{ "dropped" : "school", "ok" : 1 }
4. 查看当前正在使用的数据库
可以使用如下两种方法进行查询当前正在使用的数据库
第一种方法:
> db
school
第二种方法:
> db.getName()
school
5. 断开连接
> exit
bye
6. 查看命令api
可以使用help查询api
> help
二、集合操作
1. 查看当前数据库下有哪些集合
我们可以使用如下语句查看当前数据库下有哪些集合
> show collections
2. 创建集合
格式:
db.collection_name.insert(doc)
注意:如果集合不存在,则自动创建集合并将文档插入,如集合存在,则直接将文档插入
例如:
> show collections> db.student.insert({name:'叶无道',sex:'男',age:25,score:92})
WriteResult({ "nInserted" : 1 })> show collections
student
system.indexes
3. 删除当前数据库中的集合
格式:
db.collection_name.drop()
当集合存在时,删除集合会返回true,否则返回false,如下:
> show collections
Class
student
system.indexes> db.Class.drop()
true> db.Class.drop()
false> show collections
student
system.indexes
三、文档操作
1. 插入文档:insert()和save()
(1) 使用insert()方法插入文档
格式1:插入一个文档
db.collection_name.insert(doc)
格式2:插入多个文档
db.collection_name.insert(doc1,doc2,...,docN)
例1:插入一个学生
> db.student.insert({name:'慕容雪痕',sex:'女',age:23,score:98})
WriteResult({ "nInserted" : 1 })
例2:插入多个学生
> db.student.insert([{name:'杨宁素',sex:'女',age:36,score:95},{name:'苏惜水',sex:'女',age:37,score:90}])
BulkWriteResult({"writeErrors" : [ ],"writeConcernErrors" : [ ],"nInserted" : 2,"nUpserted" : 0,"nMatched" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ]
})
(2) 使用save()方法插入文档
格式:
db.collection_name.save(doc)
注意:如果指定_id字段,则会更新_id字段的数据;不指定_id字段,save()方法类似于insert()方法
例1:
> db.student.save({name:'蔡羽绾',sex:'女',age:28,score:89})
WriteResult({ "nInserted" : 1 })
例2:
db.student.save({"_id" : ObjectId("5d27285989a435a8bca30e8e"),name:'蔡羽绾',sex:'女',age:30,score:86})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
2. 文档更新
update()方法用于更新已存在的文档
格式:
db.collection_name.update(query,update,{upsert:<boolean>, multi:<boolean>,})
参数说明:
- query:update的查询条件,类似于sql里update语句内where后面的内容
- update:update的对象和一些更新的操作符($set,$inc)等,$set直接更新,$inc在原有的基础上累加后更新
- upsert:可选,如果不存在update的记录,是否当新数据插入,true为插入,false为不插入,默认为false
- multi:可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就按照条件查找出来的数据全部更新
例1:将慕容雪痕的年龄更新为21
> db.student.update({name:'慕容雪痕'},{$set:{age:21}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
例2:将杨宁素的年龄减3岁
> db.student.update({name:'杨宁素'},{$inc:{age:-3}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
例3:将女生的年龄都改为18
> db.student.update({sex:'女'},{$set:{age:18}},{multi:true})
WriteResult({ "nMatched" : 4, "nUpserted" : 0, "nModified" : 4 })
例4:如果不能匹配则插入,如果匹配则更新多条
> db.student.update({name:'赵清思'},{$set:{name:'赵清思',sex:'女',age:20,score:88}},true,true)
WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : ObjectId("5d2730ef76728d7ac5650485")
})> db.student.update({sex:'女'},{$set:{score:99}},true,true)
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 5 })
3. 文档删除
格式:
db.集合名.remove(query,{justOne:<boolean>,})
参数说明:
- query:可选,删除的文档的条件
- justOne:可选,如果为true或1,则只删除一个文档
建议:在执行remove()函数前,先执行find()命令来判断执行的条件是否存在是一个良好习惯
例1:删除一个文档
> db.student.remove({score:98},{justOne:true})
WriteResult({ "nRemoved" : 1 })
例2:删除多个文档
> db.student.remove({score:98})
WriteResult({ "nRemoved" : 4 })
4. 文档查询
(1) 查询集合下所有的文档(数据)
格式:
db.collection_name.find()
例如:
> db.student.find()
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(2) 查询指定列
格式:
db.collection_name.find(query,{<key>:1,<key>:1...})
参数说明:
- query:查询条件
- key:要显示的字段,1表示显示
例1:查询所有的name和score
> db.student.find({},{name:1,score:1})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "score" : 92 }
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "score" : 98 }
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "score" : 98 }
例2:查询所有男生的name和score
> db.student.find({sex:'男'},{name:1,score:1})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "score" : 92 }
(3) pretty()方法以格式化的方式来显示文档
> db.student.find({sex:'男'},{name:1,score:1}).pretty()
{"_id" : ObjectId("5d2708ae3c9a378bf66cf64a"),"name" : "叶无道","score" : 92
}
(4) findOne()方法查询匹配结果的第一条数据
> db.student.findOne({age:18})
{"_id" : ObjectId("5d2716af3c9a378bf66cf64c"),"name" : "慕容雪痕","sex" : "女","age" : 18,"score" : 98
}
(5) 查询某个结果集的数据条数
> db.student.find().count()
6
5. 查询条件操作符
作用:条件操作符用于比较两个表达式并从Mongodb集合中获取数据
格式:
db.collection_name.find({<key>:{operator:<value>}})
(1) 大于($gt)
> db.student.find({age:{$gt:20}})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
(2) 大于等于($gte)
> db.student.find({age:{$gte:20}})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(3) 小于($lt)
> db.student.find({age:{$lt:20}})
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
(4) 小于等于($lte)
> db.student.find({age:{$lte:20}})
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(5) 等于(:)
> db.student.find({age:20})
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(6) 小于等于和大于等于连用
> db.student.find({age:{$gte:20,$lte:25}})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(7) 使用_id进行查询
> db.student.find({_id:ObjectId("5d2716af3c9a378bf66cf64c")})
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
(8) 查询某个字段的值当中是否包含另一个值
> db.student.find({name:/雪/})
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
(9) 查询某个字段的值是否以另一个值开头
> db.student.find({name:/^叶/})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
6. 条件查询:and和or
(1) and条件
格式:
db.collection_name.find({条件1,条件2,……,条件n})
例:查询年龄大于等于20的女生
> db.student.find({age:{$gte:20},sex:'女'})
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(2) or条件
格式:
db.集合名.find({$or:[{条件1},{条件2},……,{条件n}]})
例:查询age=20或者sex=男的学生
> db.student.find({$or:[{age:20},{sex:'男'}]})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(3) and和or的联合使用
例:查询所有男生或者年龄20的女生
> db.student.find({$or:[{sex:'男'},{age:20,sex:'女'}]})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
7. limit和skip
(1) limit:读取指定数量的数据记录
> db.student.find().limit(3)
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
(2) skip:跳过指定数量的数据
> db.student.find().skip(4)
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
(3) skip与limit联合使用
通常用这种方式来实现分页功能
例:每页显示4个文档
> db.student.find().skip(0).limit(4)
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "sex" : "女", "age" : 18, "score" : 98 }> db.student.find().skip(4).limit(4)
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
8. 排序
格式:
db.collection_name.find().sort({<key>:1|-1})
说明:1表示升序,-1表示降序
例:按照score值升序排序,若score值相等则按name值升序排序
> db.student.find().sort({score:1,name:1})
{ "_id" : ObjectId("5d2708ae3c9a378bf66cf64a"), "name" : "叶无道", "sex" : "男", "age" : 25, "score" : 92 }
{ "_id" : ObjectId("5d2716af3c9a378bf66cf64c"), "name" : "慕容雪痕", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffb"), "name" : "杨宁素", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d271d28c7091979f2521ffc"), "name" : "苏惜水", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d27285989a435a8bca30e8e"), "name" : "蔡羽绾", "sex" : "女", "age" : 18, "score" : 98 }
{ "_id" : ObjectId("5d2730ef76728d7ac5650485"), "name" : "赵清思", "sex" : "女", "age" : 20, "score" : 98 }
MongoDB数据库—基本操作相关推荐
- 头歌 MongoDB 数据库基本操作
MongoDB 数据库基本操作 第1关:数据库创建 第2关:创建集合 第3关:文档操作一 第4关:文档操作二 第1关:数据库创建 pgrep mongo -l mongo use mydb db.my ...
- 分布式数据库NoSQL(二)——MongoDB 数据库基本操作
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- MongoDB数据库基本操作笔记
为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为Mongodb是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改 ...
- Mongodb 数据库基本操作语句,结合 Node.js + express + mongoose (实现增、删、改、查,批量增加、修改等,创建临时表,多表查询......)
版本说明 "MongoDB": "4.0.9", // cmd命令窗输入:mongo --version "node": 10.13.0, ...
- mongodb在mysql中怎么用,mongoDB数据库基本操作
mongoDB中聚集集合(collection/coll)相当于mysql中的表 文档相当于mysql中的每一行数据 常用命令 1.获得帮助命令db.help() db.表名.help() db.表名 ...
- educoder MongoDB 数据库基本操作
第1关:数据库创建 编程要求 在右侧命令行中连接 MongoDB ,创建一个名为 mydb 的数据库,并插入数据:_id:1,name:"李小红". 测试说明 操作完之后点击评测, ...
- MongoDB数据库基本操作
文章目录 1.创建库 2.创建集合 3.插入.查看数据 4.查找内容 5.设置别名 6.查看数据类型 7.更改数据内容 8.删除集合 9.删除数据库 10.统计集合中数据条数 11.导出数据库中的数据 ...
- mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
第1章 MongoDB的基本操作 1.1 查询帮助信息 > help db.help() help on db methods db.mycoll.help ...
- MongoDB的基本操作(创建数据库,数据表,查询数据表信息)
今天,因为有朋友想要了解MongoDB的基本操作.所以,我就写一篇关于MongoDB的文章,占个坑以后有时间研究MongoDB再正式的写MongoDB的文章.关于MongoDB的安装,可以参考一下我的 ...
最新文章
- 复杂SELECT语句执行过程
- POJ 2800 垂直直方图 解题报告
- mybatis一级缓存命中条件
- Linux中查看日志文件的正确姿势,求你别tail走天下了!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...
- Java引用类型有哪些
- jQuery如何选择表格每行中的第三列?
- 【渝粤题库】国家开放大学2021春2108刑法学(2)题目
- [hackinglab][CTF][解密关][2020] hackinglab 解密关 writeup
- 这8种保证线程安全的技术你都知道吗?
- ExtJs中Store简介(秘籍)
- 升级AndroidStudio3.4问题汇总
- php---需要判断远程URL是否有效
- 解决 Chrome 下载不了东西 失败 - 已屏蔽 的问题
- leetcode之移动零
- python带我起飞 百度云_CentOS/Debian安装人人影视客户端,下载资源并自动上传到OneDrive网盘...
- unity 草 可以一棵棵种吗?_5种多肉叶插成活率超高,养一棵成活一大片,种都没地方种...
- 测试开发面试题汇总(自用)
- SPSS如何进行一致性检验(计算kappa值)
- 三菱Q系列通过wifi联服务器,三菱Q系列PLC以太网通讯,三步可以搞定!
热门文章
- 利用金山快盘和TortoiseSVN搭建自己的svn服务器
- SQLserver主从同步报错:Message: 无法创建 AppDomain “mssqlsystemresource.dbo[runtime].
- 用java实现耀辉三角
- drf快速入门01---REST规范介绍序列化器的基础使用
- 二维码符号体系已经到来
- win7计算机无用系统文件夹,c盘怎么清理到最干净(win7如何删除c盘无用文件)...
- 穹顶灯打不出阴暗面_微服务的阴暗面,解释
- kubernetes资源--secret和ServiceAccount
- Web 前端学习 之servlet技术(一)
- Android VectorDrawable 的使用