前面介绍了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的增删改查操作相关推荐

  1. Node.js对MongoDB进行增删改查操作

    MongoDB简介 MongoDB是一个开源的.文档型的NoSQL数据库程序.MongoDB将数据存储在类似JSON的文档中,操作起来更灵活方便.NoSQL数据库中的文档(documents)对应于S ...

  2. SpringBoot操作MongoDB实现增删改查

    本篇博客主讲如何使用SpringBoot操作MongoDB. SpringBoot操作MongoDB实现增删改查 (1)pom.xml引入依赖 <dependency> <group ...

  3. servlet增删改查实例_SpringBoot系列(2)整合MongoDB实现增删改查(完整案例)

    自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整 ...

  4. python mongodb_python实现mongodb的增删改查

    python实现mongodb的增删改查 环境: 192.168.122.1 python 192.168.122.11 mongodb 一.安装pip,python的管理工具 官网下载: pip-1 ...

  5. MongoDB数据库增删改查基本使用

    MongoDB数据库增删改查基本使用 文章目录 MongoDB数据库增删改查基本使用 1.CRUD介绍 2.MongoDB数据库常用命令 3.MongoDB数据库显示命令 3.1.查询当前有多少个数据 ...

  6. mongodb android,Android编程连接MongoDB及增删改查等基本操作示例

    本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提 ...

  7. python增删改查的框架_简单的Django框架增删改查操作

    Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...

  8. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

  9. 学生信息管理系统(连接数据库,面向对象的方法实现学生信息的增删改查操作)...

    ---------------------------------------------------------------------------------------------------- ...

最新文章

  1. 消息队列系列二(IOT中消息队列的应用)
  2. easyUI tabs 显示与隐藏 tab 页
  3. LeetCode 1197. 进击的骑士(BFS)
  4. 【LeetCode笔记】剑指 Offer 60. n个骰子的点数(Java、动态规划)
  5. c++该转java吗_java多线程,静态方法加锁后,调用该方法会影响其它方法吗?
  6. Flex Builder 不能Profile的另一个原因:不能使用中文用户名
  7. 故障:“远程计算机需要网络级别身份验证
  8. C++ 归并排序与快速排序
  9. 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现
  10. C罗111球成国家队历史射手王,破纪录的动力来自签约曼联
  11. 查看php探针,什么是php探针
  12. struct dirent 和 struct stat 结构体
  13. java 读取 解析微软Project .mpp 文件
  14. 微带贴片天线的分析方法-空腔模型法
  15. 「硅仙人」吉姆 · 凯勒
  16. php批量解密decoder,IonCube v8.3 Decoder解密工具
  17. Oracle SQL开发考试试题
  18. uni-app 170邀请加入群聊(二)
  19. Auto.js 意图跳转系统大全
  20. 坐标系转换中位姿与位置

热门文章

  1. 欧盟批准ATT收购时代华纳 或年底前完成交易
  2. 【转】mybatis 自增主键配置
  3. JS中setInterval、setTimeout不能传递带参数的函数的解决方法
  4. mocha.js 生成覆盖率报告
  5. 调试方法和技巧(zz)
  6. 曾经一手好牌,但如今却被网友怼或已堕落
  7. iOS开发中用到的第三方库概览
  8. macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
  9. Swift 2.3- 3.0
  10. 【Android】Android6.0发送短信Demo