zoukankan      html  css  js  c++  java
  • Python全栈 MongoDB 数据库(数据的修改)

    修改操作符的使用
     
    $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})
  • 相关阅读:
    Maven安装教程详解
    eclipse配置apache tomcat运行时访问路径不需要项目名称
    Spring MVC Captcha 验证码
    Vue混入的详解
    Eclipse上传项目到Git
    mysql 8.0.11 中使用 grant ... identified by 时 error 1064 near 'identified by '密码'' at line 1
    转 js自定义事件——Event和CustomEvent
    tp隐藏入口文件
    php发送邮件
    【项目练习】控制器直接操作--登录
  • 原文地址:https://www.cnblogs.com/ParisGabriel/p/9515335.html
Copyright © 2011-2022 走看看