缘由:使用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()更新数据库记录遇到的坑。的更多相关文章

  1. windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  2. flask 使用Flask-Migrate迁移数据库(创建迁移环境、生成迁移脚本、更新数据库)

    使用Flask-Migrate迁移数据库 在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据.在生产环境下,没有人想把数据都删除掉,这时需要使用数据库迁移工具来完 ...

  3. MongoDB源码分析——mongod数据查询操作

    源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...

  4. [Spring Data MongoDB]学习笔记--MongoTemplate查询操作

    查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...

  5. MongoDB(9)- 文档查询操作之 find() 的简单入门

    find() MongoDB 中查询文档使用 find() find() 方法以非结构化的方式来显示所要查询的文档 语法格式 db.collection.find(query, projection) ...

  6. MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

    MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...

  7. 分享知识-快乐自己:Hibernate各种查询操作

    Hibernate各种查询操作(一) 测试数据库如下: t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面 ...

  8. ocdefirst安装更新数据库

    数据迁移(Migrations) 启用数据迁移在控制台中输入如下命令:Enable-Migrations 这时会在项目目录中增加一个Migrations文件夹,里面放置了两个文件:EF会通过C#代码的 ...

  9. C# 使用Code First迁移更新数据库

    三步完成迁移: 1. 启用迁移: Enable-Migrations Enable-Migrations -ContextTypeName Mvc4WebSite.Models.MvcGuestboo ...

随机推荐

  1. python 类和方法(面向对象)

    类和方法 name = "Jack" city = "bejing" print("my name is %S and come from %s &q ...

  2. 【Python】自动化测试的7个步骤

    我们对自动化测试充满了希望,然而,自动化测试却经常带给我们沮丧和失望.虽然,自动化测试可以把我们从困难的环境中解放出来,在实施自动化测试解决问题的同时,又带来同样多的问题.在开展自动化测试的工作中,关 ...

  3. 大白话详解大数据hive知识点,老刘真的很用心(3)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(3) 从这篇文章开始决定进行一些改变,老刘在博客上主要分享 ...

  4. 个人微信公众号搭建Python实现 -个人公众号搭建-被动回复消息建模(14.3.2)

    @ 目录 1.阅读官方文档 2.思考 关于作者 1.阅读官方文档 点击进入微信官方开发者文档 接收普通消息 文本消息 图片消息 语言消息 视频消息 小视频消息 地理位置消息 链接消息 接收事件消息 关 ...

  5. matplotlib的学习4-设置坐标轴

    import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y1 = 2*x + 1 y2 = x**2 ...

  6. PHP面向对象的学习(封装,继承,多态)

    这个文章就是记录  巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...

  7. 2020 史上最全IDEA插件总结

    最喜欢的一句话: 1.01的365次方=37.78343433289 >>>1 0.99的365次方= 0.02551796445229, 每天进步一点点的目标,贵在坚持 IDEA ...

  8. Linux工具包

    Linux的工具包 JDK 版本:14    百度网盘:链接: https://pan.baidu.com/s/1hWqGVmsElOCBufMuscPXzw  密码:st3y 安装步骤: 1.使用S ...

  9. [C#] (原创)进度等待窗口(附:自定义控件的使用)

    一.前言 技术没有先进与落后,只有合适与不合适. 在程序当中,经常有耗时较长的操作,为了给用户更好的体验,就需要给用户一个及时的反馈,这种时候就需要用到进度等待窗口. 实现进度等待窗口的技术有很多,比 ...

  10. 7.自定义ViewGroup-下滑抽屉

    1.效果 2.思路 分析效果: 1.布局分为两部分,后面部分,前面部分,默认状态后面被挡住: 2.后面不可以滑动,前面可以滑动: 3.如果前面的布局本身是可以滑动的,那么当前面布局滑动到第一个时,后面 ...