修改操作符的使用
 
$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. mysql五种日期函数

    create table timess( id int primary key auto_increment, YEARs ——” DATEs DATE ——” TIMEs TIME ::——::” ...

  2. 【题解】洛谷P1002过河卒

    首先,一道入门DP 然而对于蒟蒻的我已经难到爆了好吗 第一点:动态转移方程 用DP的关键! 这题我们可以发现每一步的方案数由上面的那步加上左边的那步得到 所以自然而然的方程就出来了: f[i][k]= ...

  3. c语言描述的数据结构的注意细节

    :顺序表使用基址来表示和存储 int *p; p=(int *)malloc(initsize*sizeof(int)); L—>p[x]=xx; :链表 在于除了更改数据还要更改前后与之关联的 ...

  4. jquery 发送短信60后重新获取

    先需要form表单,获取短信的按钮做成两个相同的,一个显示,一个隐藏. <div class="item">                    <p clas ...

  5. css的基础用法(下)

    定位: <html> <head> <meta charset="utf-8" /> <title>定位</title> ...

  6. cornerstone提示“SQLite-database disk image is malformed”

    当点击workingCopy时错误如下 google了一下,有是有解决的办法,可是这些都是直接使用sqlite时产生的问题. sqlite错误 The database disk image is m ...

  7. 解读JavaScript中的Hoisting机制(js变量声明提升机制)

    hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...

  8. Java程序如何生成Jar 执行文件(2)

    一.用Eclipse生产Jar文件 注意:此方法可以打包含有第三方jar包的项目 1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所 ...

  9. MySQL——用户与密码

    mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码.通过下面的方式找到root默认密码,然后登录mysql进行修改: grep 'temporary p ...

  10. 05 shell编程之正则表达式

    正则表达式&&文本处理利器 学习目标: l  掌握正则表达式的运用 l  掌握sed.awk文本处理工具的使用 目录结构:   正则表达式 正则表达式概述 l  正则表达式:使用单个字 ...