MongoDB的增删改查操作
前面介绍了MongoDB的基本概念与常见的操作,本文来重点分析下MongoDB的增删改查操作
文章目录
- 什么是“mongo”
- 新增操作
- 删除操作
- 更新操作
- 查询操作
- Where语句
- $type操作符
- AND条件
- OR条件
- AND和OR联合使用
- 本文小结
什么是“mongo”
它是一个命令行工具,用于连接一个特定的mongod实例。当我们没有带参数运行mongo命令,它将使用默认的端口号和localhost连接。本文对MongoDB增删改查操作都是使用mongo客户端来进行操作的。后续会介绍mongodb的可视化客户端mongodb-compass,这个工具就类似mysql中的navicat工具。
新增操作
插入数据
MongoDB 使用 insert() 或 save() 方法向集合中插入文档:如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
insert() 或 save() 方法都可以向collection里插入数据,两者区别:
- 如果不指定 _id 字段,save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
- 使用save函数,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作。
- insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。
基本的使用格式
db.col_name.insert(document)db.col_name.save(document)
插入一个文档到 col 集合中:
db.col.insert({title: 'MongoDB教程',description: 'MongoDB是一个Nosql数据库',by: 'admin',tags: ['mongodb', 'database', 'NoSQL'],likes: 100})
也可以将文档数据定义为一个变量,如下所示:
document = ({title: 'MongoDB教程',description: 'MongoDB是一个Nosql数据库',by: 'admin',tags: ['mongodb', 'database', 'NoSQL'],likes: 100})db.col_2.insert(document)
删除操作
remove() 函数是用来删除集合中的数据。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。
db.col_name.remove(<query>,{justOne: <boolean>,writeConcern: <document>}
)- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
删除集合中所有文档
db.col.remove({})
删除集合中符合过滤条件的数据,删除likes中包含e的文档对象
> db.col.remove({likes:/e/})
移除 col 集合中 title 为 MongoDB教程 的文档,只删除第一条找到的记录
> db.col.remove({'title':'MongoDB教程'}, 1)
WriteResult({ "nRemoved" : 1 })
按照索引的顺序来删除数据,比如删除col集合中的第一个文档对象
> db.col.remove({},1)
WriteResult({ "nRemoved" : 1 })
更新操作
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
update() 方法用于更新已存在的文档
db.col_name.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>}
)- query : update 的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入记录,true 为插入,默认是 false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
通过 update() 方法来更新 col 集合中的 title
$set 操作符为部分更新操作符,只更新 $set 之后的数据,而不是覆盖之前的数据。
db.col.update({ 'title': 'MongoDB教程' }, { $set: { 'title': 'MongoDB' } })
以上语句只会修改第一条发现的文档,如果要修改多条相同的文档,则需要设置 multi 参数为 true。
db.col.update({ 'title': 'MongoDB教程' }, { $set: { 'title': 'MongoDB' } }, { multi: true })
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.col_name.save(<document>,{writeConcern: <document>}
)
以下实例中我们替换了 col的文档数据:
document = ({# 是根据ID去相同去进行更新操作"_id" : ObjectId("61a6e084e9589b7c41110da4"),title: 'MongoDB教程',description: 'MongoDB是一个Nosql数据库',by: 'admin',tags: ['mongodb', 'database', 'NoSQL'],likes: 'hello world'
})> db.col.save(document)
查询操作
查询操作是数据库操作中,功能最丰富的操作。下面重点说下MongoDB中各种常见的查询操作。
先往col集合中查询三份文档数据信息,只是其中的likes字段有点不同。
MongoDB通过collection对象的find()方法来查询文档,语法如下。find()相当于mysql中的select。
db.collection.find(query, projection)
# query:查询条件,类似于SQL中的WHERE部分
# projection:可选,使用投影操作符指定返回的键
find() 方法,它返回集合中所有文档
> db.col.find()
{ "_id" : ObjectId("61a6da36e9589b7c41110da3"), "title" : "MongoDB", "description" : "MongoDB是一个Nosql数据库", "by" : "admin", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : "hello" }
{ "_id" : ObjectId("61a6e084e9589b7c41110da4"), "title" : "MongoDB教程", "description" : "MongoDB是一个Nosql数据库", "by" : "admin", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : "hello world" }
{ "_id" : ObjectId("61a6e4a1e9589b7c41110da5"), "title" : "MongoDB教程", "description" : "MongoDB是一个Nosql数据库", "by" : "admin", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : "world" }
>
格式化输出:
> db.col.find().pretty()
{"_id" : ObjectId("61a6da36e9589b7c41110da3"),"title" : "MongoDB","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello"
}
{"_id" : ObjectId("61a6e084e9589b7c41110da4"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello world"
}
{"_id" : ObjectId("61a6e4a1e9589b7c41110da5"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world"
}
>
findOne() 方法,它只返回一个文档。
> db.col.findOne()
{"_id" : ObjectId("61a6da36e9589b7c41110da3"),"title" : "MongoDB","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello"
}
>
读取指定记录的条数
> db.col.find().pretty().limit(2)
{"_id" : ObjectId("61a6da36e9589b7c41110da3"),"title" : "MongoDB","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello"
}
{"_id" : ObjectId("61a6e084e9589b7c41110da4"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello world"
}
>
跳过指定数量的数据
> db.col.find().pretty().skip(1)
{"_id" : ObjectId("61a6e084e9589b7c41110da4"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello world"
}
{"_id" : ObjectId("61a6e4a1e9589b7c41110da5"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world"
}
>
排序:sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
> db.col.find().pretty().sort({'_id':1})
{"_id" : ObjectId("61a6da36e9589b7c41110da3"),"title" : "MongoDB","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello"
}
{"_id" : ObjectId("61a6e084e9589b7c41110da4"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello world"
}
{"_id" : ObjectId("61a6e4a1e9589b7c41110da5"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world"
}
>
> db.col.find().pretty().sort({'_id':-1})
{"_id" : ObjectId("61a6e4a1e9589b7c41110da5"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world"
}
{"_id" : ObjectId("61a6e084e9589b7c41110da4"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello world"
}
{"_id" : ObjectId("61a6da36e9589b7c41110da3"),"title" : "MongoDB","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "hello"
}
>
sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
Where语句
如果你想获取"col"集合中 “data” 大于100,小于 200 的数据,你可以使用以下命令:
db.col.find({data : {$lt :200, $gt : 100}})// 类似于SQL语句:
Select * from col where data>100 AND data<200;
测试实例
> db.col.find({data : {$lt :200, $gt : 100}}).pretty()
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
>
>
> db.col.find().pretty()
{"_id" : ObjectId("61a71059e9589b7c41110da6"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 100
}
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
>
>
> db.col.find({data : {$lt :200, $gt : 100}}).pretty()
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
>
条件操作符
条件操作符 | 中文 | 全英文 |
---|---|---|
$gt | 大于 | greater than |
$gte | 大于等于 | greater than equal |
$lt | 小于 | less than |
$lte | 小于等于 | less than equal |
$ne | 不等于 | not equal |
$type操作符
用来检索集合中匹配的数据类型
获取 “col” 集合中 data 为 String 的数据,获取 “col” 集合中 data 为 整型(数字默认保存为double类型) 的数据,你可以使用以下命令:
> db.col.find().pretty()
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
>
> db.col.find({"data" : {$type : 1}}).pretty()
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
>
>
> db.col.find({"data" : {$type : 2}}).pretty()
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
AND条件
find() 方法可以传入多个键(key),每个键(key)以逗号隔开,语法格式如下:
db.col_name.find({key1:value1, key2:value2}).pretty()// 类似于 SQL and 语句:
SELECT * FROM col_name WHERE key1='value1' AND key2=value2
查询出col集合中by为admin并且data为800的文档对象
> db.col.find().pretty()
{"_id" : ObjectId("61a71907e9589b7c41110da7"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 150
}
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
>
> db.col.find({"by":"admin","data":"800"}).pretty()
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
OR条件
or条件用例测试
> db.col.find().pretty()
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
>
> db.col.find({ $or: [{ "likes": "world" }, { "data": 400 }] }).pretty()
{"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
>
AND和OR联合使用
AND 和 OR 联合使用测试用例
> db.col.find().pretty()
{ ()"_id" : ObjectId("61a7192ce9589b7c41110da8"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"likes" : "world","data" : 200
}
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
{"_id" : ObjectId("61a72071e9589b7c41110daa"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : "800"
}
>
>
>
> db.col.find({"data": {$gt: 300},$or: [{"by": "admin" }, {"title": "MongoDB教程"}]}).pretty()
{"_id" : ObjectId("61a71df7e9589b7c41110da9"),"title" : "MongoDB教程","description" : "MongoDB是一个Nosql数据库","by" : "admin","tags" : ["mongodb","database","NoSQL"],"data" : 400
}
>// 类似常规 SQL 语句:
SELECT * FROM col where data>300 AND (by = 'admin' OR title = 'MongoDB教程')
本文小结
本文详细介绍了MongoDB中的增删改查操作,查询操作内容相关的概念与知识过多,后续会继续介绍。
MongoDB的增删改查操作相关推荐
- Node.js对MongoDB进行增删改查操作
MongoDB简介 MongoDB是一个开源的.文档型的NoSQL数据库程序.MongoDB将数据存储在类似JSON的文档中,操作起来更灵活方便.NoSQL数据库中的文档(documents)对应于S ...
- SpringBoot操作MongoDB实现增删改查
本篇博客主讲如何使用SpringBoot操作MongoDB. SpringBoot操作MongoDB实现增删改查 (1)pom.xml引入依赖 <dependency> <group ...
- servlet增删改查实例_SpringBoot系列(2)整合MongoDB实现增删改查(完整案例)
自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整 ...
- python mongodb_python实现mongodb的增删改查
python实现mongodb的增删改查 环境: 192.168.122.1 python 192.168.122.11 mongodb 一.安装pip,python的管理工具 官网下载: pip-1 ...
- MongoDB数据库增删改查基本使用
MongoDB数据库增删改查基本使用 文章目录 MongoDB数据库增删改查基本使用 1.CRUD介绍 2.MongoDB数据库常用命令 3.MongoDB数据库显示命令 3.1.查询当前有多少个数据 ...
- mongodb android,Android编程连接MongoDB及增删改查等基本操作示例
本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提 ...
- python增删改查的框架_简单的Django框架增删改查操作
Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...
- python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...
- 学生信息管理系统(连接数据库,面向对象的方法实现学生信息的增删改查操作)...
---------------------------------------------------------------------------------------------------- ...
最新文章
- 消息队列系列二(IOT中消息队列的应用)
- easyUI tabs 显示与隐藏 tab 页
- LeetCode 1197. 进击的骑士(BFS)
- 【LeetCode笔记】剑指 Offer 60. n个骰子的点数(Java、动态规划)
- c++该转java吗_java多线程,静态方法加锁后,调用该方法会影响其它方法吗?
- Flex Builder 不能Profile的另一个原因:不能使用中文用户名
- 故障:“远程计算机需要网络级别身份验证
- C++ 归并排序与快速排序
- 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现
- C罗111球成国家队历史射手王,破纪录的动力来自签约曼联
- 查看php探针,什么是php探针
- struct dirent 和 struct stat 结构体
- java 读取 解析微软Project .mpp 文件
- 微带贴片天线的分析方法-空腔模型法
- 「硅仙人」吉姆 · 凯勒
- php批量解密decoder,IonCube v8.3 Decoder解密工具
- Oracle SQL开发考试试题
- uni-app 170邀请加入群聊(二)
- Auto.js 意图跳转系统大全
- 坐标系转换中位姿与位置