修改操作符的使用
 
$set
修改一个域的值,增加一个域
 
阿哲年龄修改为33
db.class1.update({name:'阿哲'},{$set:{age:33}})
 
如果sex域不存在则会添加这个域
db.class1.update({name:'阿蓉'},{$set:{sex:'w'}})
 
$unset
删除一个域
 
删除sex域
db.class1.update({name:'小陈'},{$unset:{sex:''}})
 
* 每个操作符可以同时操作多项
db.class1.update({name:'陈'},{$set:{age:36,sex:'m'}})
 
* 一次修改可以同时使用多个操作符
db.class1.update({name:'阿宝'},{$set:{name:'老王'},$unset:{sex:''}})
 
$rename
修改域名
 
将sex域名改为gender
db.class1.update({sex:{$exists:true}},{$rename:{sex:'gender'}},false,true)
 
$setOnInsert
如果第三个参数为true且插入数据,则表示插入文档的补充内容。如果不插入文档则不起作用
 
如果插入新文档则setOnInsert中键值对也作为文档内容
db.class1.update({name:'阿文'},{$set:{age:32},$setOnInsert:{gender:'m'}},true)
 
$inc
加减修改器
db.class1.update({},{$inc:{age:-1}},false,true)
 
$mul
乘法修改器
db.class2.update({},{$mul:{age:2}},false,true)
 
* $inc   $mul  参数可以使整数小数正数负数
 
$min 
如果筛选文档指定域的值小于min值则不修改,大于min值则修改为min值
 
如果age大于18则修改为18
db.class2.update({},{$min:{age:18}},false,true)
 
$max
如果筛选文档指定域的值大于max值则不修改,小于max值则修改为max值
 
将年龄不到30的修改为30
db.class1.update({},{$max:{age:30}},false,true)
 
 
数组修改器
 
$push
向数组中添加一项
 
向score数组中添加一项
db.class2.update({name:'小亮'},{$push:{score:91}})
 
$pushAll
向数组中添加多项
db.class2.update({name:'小明'},{$pushAll:{score:[5,10]}})
 
$pull
从数组中删除一项
db.class2.update({name:'小明'},{$pull:{score:10}})
 
$pullAll
从数组中删除多项
db.class2.update({name:'小明'},{$pullAll:{score:[58,5]}})
 
$each  
对多个值进行逐一操作
db.class2.update({name:'小明'},{$push:{score:{$each:[60,10]}}})
 
$position  
指定插入位置
 
配合each使用将数据插入到指定位置
 db.class2.update({name:'小红'},{$push:{score:{$each:[5],$position:1}}})
 
$sort  
对数组进行排序
 
对数组进行排序
db.class2.update({name:'小明'},{$push:{score:{$each:[],$sort:1}}})
 
$pop 
弹出一项
 
1表示弹出数组中最后一项,-1表示弹出第一项
db.class2.update({name:'小明'},{$pop:{score:-1}})
 
$addToSet
向数组中添加一项,但是不允许添加重复内容
 
如果数组中没有80则添加80
db.class2.update({name:'小红'},{$addToSet:{score:80}})
 
时间类型
 
mongodb 中支持时间格式 : ISODate()
 
1. 使用new Date() 自动生成当前时间
db.class0.insert({book:'Python入门',date:new Date()})
 
2. 使用 ISODate() 生成当前时间
db.class0.insert({book:'Python精通',date:ISODate()})
 
3. 获取计算机时间生成时间格式字符串 Date()
db.class0.insert({book:'Python疯狂',date:Date()})
指定时间:
ISODate()
功能: 生成mongodb时间存储类型
参数: 不加参数生成当前时间
       指定时间格式参数:
       "2018-01-01 12:12:12"
       "20180101 12:12:12"
       "20180101"
db.class0.insert({book:'Python崩溃',date:ISODate("2018-07-13 11:23:36")})
 
时间戳:
通过当前的时间生成的一个时间节点标志
 
valueOf()
生成某个标准时间的时间戳
db.class0.insert({book:'Python重生',date:ISODate().valueOf()})
 
Null 类型:
 
值 : null  
 
1. 如果某个域存在却没有值可以设置为null
 
表示date没有实际意义的值
db.class0.insert({book:'Python编程',date:null})
 
2. 在查找时可以找到值为null或者不存在某个域的文档
 
查找到date值为null或者不存在date域的文档
 db.class0.find({date:null},{_id:0})
 
数组的下标操作方式:
可以通过  域名.下标  的方式具体操作数组的某一项
 
查找数组 0 项大于90的文档
db.class2.find({'score.0':{$gt:90}},{_id:0})
 
将score 第1项改为10
db.class2.update({name:'小红'},{$set:{'score.1':10}})
 
 
内部文档操作(Object):
文档内部某个域的值还是一个文档,则这个文档称为内部文档类型数据
 
* 通过  外部域.内部文档域  的方式引用内部文档中某个域的值进行操作
db.class3.find({'books.title':'狂人日记'},{_id:0})
 
db.class3.update({"books.title":'骆驼祥子'},{$set:{"books.price":48.6}})
 
查找结果的下标引用
可以通过下标的方式获取查找结果的某一项
 
获取查找结果的 第 2 项
db.class1.find({},{_id:0})[2]
 
 
综合示例 : 
使用之前的grade数据库
 
1.将小红年龄改为8岁,兴趣爱好变为跳舞画画
db.class.update({$set:{age:8,hobby:['dance','draw']}})
 
2. 追加小明兴趣爱好 唱歌
db.class.update({$push:{hobby:'sing'}})
 
3. 追加小王兴趣爱好,吹牛,打篮球
db.class.update({$pushAll:{hobby:['吹牛','basketball']}})
 
4. 小李兴趣多了跑步唱歌,但是要确保不和以前的重复
db.class.update({$addToSet:{hobby:{$each:['running','sing']}}})
 
5. 将该班所有同学年龄加1
db.class.update({},{$inc:{age:1}},false,ture)
 
6. 删除小明的sex属性
db.class.update({$unset:{sex:''}})
 
7.删除小李兴趣中的第一项
db.class.update({$pop:{hobby:-1}})
 
8,删除小红兴趣中的画画和唱歌
db.class.update({$pullAll:{hobby:['draw','sing']}})
 
9. 为小红增加一个域,为  score:{english:93,chinese:92,match:78}
db.class.update({$set:{score:{english:93,chinese:92,match:78}}})
 
10. 给小红数学成绩加5分
db.class.update({$inc:{'score.math':5}})
 
11. 小明的第一爱好改为computer
db.class.update({$set:{'hobby.0':'computer'}})
 
 
索引:
指建立指定键值及所在文档中存储位置的对照清单,
使用索引可以方便我们进行快速查找,减少数据遍历次数,从而提高查找效率
 
Mongodb创建索引:
ensureIndex()
功能 : 
创建索引
参数 : 
第一个为对哪个域创建索引
第二个为索引的选项
对name域创建索引
db.class1.ensureIndex({name:1})
* 1表示正向索引  -1表示逆向索引
 
查看某个集合中的索引:
db.class1.getIndexes()
* _id是系统为每个集合自动创建的索引
 
自定义索引名称
通过第二个参数传入索引选项实现
db.class1.ensureIndex({age:1},{name:'ageIndex'})
* 同一个域不能重复创建相同的索引,一个集合中索引名也不要相同
 
删除索引:
dropIndex()
功能: 
删除一个索引
参数: 
索引名或者索引键值对
 
db.class1.dropIndex({name:-1})
db.class1.dropIndex("ageIndex")
 
dropIndexes()
功能:
删除所有索引
 
删除class1中所有索引,但是不会删除_id索引
db.class1.dropIndexes()
 
其他索引类型:
 
复合索引:
同时根据多个域创建一个索引
 
根据name和age域查询都为索引查询,比单独创建两个索引表更节省空间
db.class1.ensureIndex({name:1,age:-1})
 
 
数组和子文档索引:
如果对某个数组和子文档域创建索引,那么根据数组和子文档的查找均为索引查找
 
如果对score域创建索引则 下面的查找也是索引查找
 db.class2.find({'score.0':60},{_id:0})
 
覆盖索引:
查找操作需要获取的域,只有索引域没有其他域。
此时索引表可以直接提供给用户想要的内容,提高查找效率
 
唯一索引:
创建的索引,索引域值无重复,此时可以创建唯一索引
唯一索引数据结构更加便于查找
 
对name创建唯一索引,name值不能有重复
db.class1.ensureIndex({name:1},{unique:true})
 
* 当对某个域创建唯一索引,该域就不能再插入重复数据
 
稀疏索引:
只针对有指定域的文档创建索引表,如果某个文档没有该域则不会插入到索引表中
 
对age创建稀疏索引
db.class1.ensureIndex({age:1},{sparse:true})
 
索引约束:
1. 索引表也需要占用一定的磁盘空间
2. 当数据发生更新时索引表也要随之更新
 
综上: 
1. 数据量比较大时更适合创建索引,数据量较小时没有必要付出索引代价
2. 频繁进行查找操作而不是更新删除插入操作,此时更适合使用索引
 
 
固定集合:
mongodb中可以创建大小固定的集合,称之为固定集合。
 
特点:  
1.插入速度更快,顺序查找更快
                2.可以控制集合的空间大小
3.能够自动淘汰早期数据
 
使用: 
日志处理
                临时缓存
 
创建:
db.createCollection(collection,{capped:true,size:10000,max:1000})
参数:
capped:true:
创建固定集合
size:10000:
    固定集合的大小  字节数
max :1000:
    表示最多多少条文档
 
创建一个固定集合
db.createCollection('log',{capped:true,size:10000,max:3})

Python全栈 MongoDB 数据库(数据的修改)的更多相关文章

  1. Python全栈 MongoDB 数据库(概念、安装、创建数据)

    什么是关系型数据库?           是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,             同时也是一个被组织成一组拥有正式描述性的表格( ...

  2. Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)

    断网了2天  今天补上     聚合操作: 对文档的信息进行整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配 ...

  3. Python全栈 MongoDB 数据库(数据的查找)

      非关系型数据库和关系型数据库的区别? 不是以关系模型构建的,结构自由 非关系型数据库不保证数据一致性 非关系型数据库可以在处理高并发和海量数据时弥补关系数据库的不足 非关系型数据库在技术上没有关系 ...

  4. Python全栈 MongoDB 数据库(Mongo、 正则基础、一篇通)

                  终端命令:       在线安装:         sudo apt-get install mongodb         默认安装路径 :  /var/lib/mong ...

  5. Python全栈 MySQL 数据库 (索引、数据导入、导出)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     表字段重命名(change)   alter table 表名 ...

  6. Python全栈 MySQL 数据库 (简述 、安装、基本命令)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     一个月的python已经结束了  下面就是数据库了   先说M ...

  7. Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)

    为了梦想与了信仰    开局一张图   主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用   先删库 再跑路.....                         ...

  8. Python全栈 MySQL 数据库 (引擎、事物、pymysql模块、orm)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     存储引擎(处理表的处理器)     基本操作:         ...

  9. 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解

    1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...

随机推荐

  1. maven项目发布到Tomcat丢失jar包

    昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat.  一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...

  2. Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件

    一.Pull解析介绍: Android上使用SAX和DOM方式解析XML的方法,并且对两种做了简单的比较,通过比较我们知道对在往往内存比较稀缺的移动设备上运行的Android系统来说,SAX是一种比较 ...

  3. HDU 1226 超级密码(数学 bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1226 超级密码 Time Limit: 20000/10000 MS (Java/Others)    ...

  4. Zookeeper入门开发demo

    package CreateGroup; import java.io.IOException; import java.util.List; import java.util.concurrent. ...

  5. 第13章 GPIO输入—按键检测

    本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...

  6. data-ng-show 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. SpringBoot非官方教程 | 第二十四篇: springboot整合docker

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot24-docker/ 本文出自方志朋的博客 这篇文 ...

  8. mysql存储过程和函数(一)

    存储过程和函数是事先经过编译并存储在数据库的一段sql语句集合,调用存储过程和函数可以简化应用程序开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对提高数据运行效率是有好处的. 存储过程和 ...

  9. C#提取html中的汉字

    using System.Text.RegularExpressions; private string StripHT(string strHtml) //从html中提取纯文本 { Regex r ...

  10. Jmeter的安装教程【图文】

    Jmeter是一款开源的测试工具,其安装分为两大部分:JDK和Jmeter 第一部分:安装JDK 第一步: 官网下载JDK,可以按照引用地址jdk下载教程进行下载,下载完毕后,进行安装即可 第二步: ...