无业可守 创新图强
living innovation

仲博平台注册

当前位置:首页 > 仲博平台注册 >

Python全栈 MongoDB 数据库(数据的修改)

日期:2019-09-02
修改操作符的使用 $set修改一个域的值,增加一个域 阿哲年龄修改为33db.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域名改为genderdb.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则修改为18db.class2.update({},{$min:{age:18}},false,true) $max如果筛选文档指定域的值大于max值则不修改,小于max值则修改为max值 将年龄不到30的修改为30db.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则添加80db.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项改为10db.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. 将该班所有同学年龄加1db.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. 小明的第一爱好改为computerdb.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}), 1, 0, 9);