MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。
缘由:使用MongoDB时遇到一些需要查询/更新操作指定某些字段的业务场景
- 查询和更新指定字段就需要进行简单的筛选和过滤,也能在大数据量时减少查询消耗时间
1. 查询数据库某些指定字段,同时默认返回_id字段
db.users.find({},{ username: 1})
以上查询为只查询users表中的所有数据的username字段,但每条查询到的记录默认还会返回_id
2. 查询数据库某些指定字段,并不返回_id字段
db.users.find({},{ username: 1, _id: 0 })
以上查询为只查询并只返回users表中的所有数据的username字段,_id字段也不会返回
语法为db.[collectionName].find({查询器},{筛选器}),通过设置字段的1或0来进行筛选
3. update()方式更新数据库某些记录的某些指定字段,这里遇到了坑,慎用db.[collectionName].update()
db.users.update({'username':'John'},{ 'age': 24})
以上更新为查找到users表中username为John的记录并更新其age字段值为24;
特别注意:使用update更新会把users表中username为John的记录,除_id的其他字段全部清空,只会保留_id字段和刚刚更新的age字段,所以需要慎用;
因为update这种文档更新方式,会用新的记录直接代替旧记录,所以需要慎用。
语法为db.[collectionName].update({查询器},{修改器})
4. $set方式更新数据库某些记录的某些指定字段
db.users.update({'username':'John'},{$set:{'age': 24}})
以上更新为查找到users表中username为John的记录并更新其age字段值为24;
$set修改器用来指定一个键值对,如果存在键就进行修改不存在则进行添加。
5. insertOrUpdate更新方式(查询器查出来数据就执行更新操作,查不出来就替换操作)
db.[collectionName].update({查询器},{修改器},true)
语法:第三个参数设置为true,代表insertOrUpdate,即存在即更新,否则插入该数据。
6. 批量更新方式(因为默认情况下,当查询器查询出多条符合条件的数据时,默认修改第一条数据,不能批量更新)
db.[collectionName].update({查询器},{修改器},false, true)
语法:添加第四个参数,该参数为true,则批量更新,为false,则更新一条。
7. $inc数字类型修改器
db.users.update({'username':'John'},{$inc:{'age': 1}})
以上更新为查找到users表中username为John的记录并在其age字段值在原来的数值上进行加一后更新,字段后设置为 -1 则为在原来的数值上减一后更新;
$inc修改器仅用于数字类型字段,他可以为指定的键对应的数字类型的数值进行加减操作。
MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。的更多相关文章
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- flask 使用Flask-Migrate迁移数据库(创建迁移环境、生成迁移脚本、更新数据库)
使用Flask-Migrate迁移数据库 在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据.在生产环境下,没有人想把数据都删除掉,这时需要使用数据库迁移工具来完 ...
- MongoDB源码分析——mongod数据查询操作
源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...
- [Spring Data MongoDB]学习笔记--MongoTemplate查询操作
查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...
- MongoDB(9)- 文档查询操作之 find() 的简单入门
find() MongoDB 中查询文档使用 find() find() 方法以非结构化的方式来显示所要查询的文档 语法格式 db.collection.find(query, projection) ...
- MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...
- 分享知识-快乐自己:Hibernate各种查询操作
Hibernate各种查询操作(一) 测试数据库如下: t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面 ...
- ocdefirst安装更新数据库
数据迁移(Migrations) 启用数据迁移在控制台中输入如下命令:Enable-Migrations 这时会在项目目录中增加一个Migrations文件夹,里面放置了两个文件:EF会通过C#代码的 ...
- C# 使用Code First迁移更新数据库
三步完成迁移: 1. 启用迁移: Enable-Migrations Enable-Migrations -ContextTypeName Mvc4WebSite.Models.MvcGuestboo ...
随机推荐
- 一段小代码秒懂C++右值引用和RVO(返回值优化)的误区
关于C++右值引用的参考文档里面有明确提到,右值引用可以延长临时变量的周期.如: std::string&& r3 = s1 + s1; // okay: rvalue referen ...
- js下 Day17、综合案例
一.面向对象轮播 效果图:
- php代码审计整理
目录 变量覆盖 1x01.extract 变量覆盖 定义和用法 语法 漏洞产生:使用了默认设置 攻击方法:制造变量名冲突,对于需要相等的值可以同时置空 修复:设定一个冲突时的处理规则 例题: 1x02 ...
- 出现VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。 未能将管道连接到虚拟机: 所有的管道范例都在使用中。
今天在学习Linux 的时候 启动VM时出现了这个问题, 搞了很久终于弄好了, 就写篇博客来记录一下,帮助一下大家,如果对大家有帮助,还请大哥大姐点个关注,你的支持就是我坚持下去的动力 ! VMwar ...
- 用Python分析北京市蛋壳公寓租房数据
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 近期,蛋壳公寓"爆雷"事件持续发酵,期间因拖欠房东房租与租客退款,蛋壳公寓陷入讨 ...
- Jquery Ajax如何添加header参数
转自网络 1 $.ajax({ 2 type: "POST", 3 url: "http://192.168.0.88/action.cgi?ActionID=WEB_R ...
- 深入浅出 Git
开篇 你可能遇到过 如果你遇到这个场景,那你可能需要版本控制. 什么是版本控制 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么内容等信息忠实地了已录下来.每一次文件的改变 ...
- 【老孟Flutter】Stateful 组件的生命周期
老孟导读:关于生命周期的文章共有2篇,第一篇是介绍 Flutter 中Stateful 组件的生命周期. 博客地址:http://laomengit.com/blog/20201227/Statefu ...
- Object[] cannot be converted to String[]
原因: 你应该是想把List数组转 String数组吧! 然后想当然的调用list.toArray()方法. 结果 该方法返回的是Object[]数组,导致类型不匹配! 解决办法: 还在乖乖的用循环吧 ...
- ACID隔离性
数据库ACID 一致性 原子性 隔离性 持久性 隔离性: 1.读未提交 2.读已提交 3.可重复读 4.串行 读未提交:容易引起脏读 读已提交:容易引起幻读(前后读到的行数不一致) 场景: A事务 ...