Skr-Eric的MongoDB课堂(四)——MongoDB的文档的删除、修改和时间、NULL类型

删除文档

mysql : delete from table where ...

mongodb : db.collection.remove(query,justOne)

 

remove(query,justOne)

功能 : 删除文档

参数 : query  用法同find

        justOne  布尔值 默认为false表示删除所有符合条件的文档

           设置为true则表示只删除一条

e.g. 删除所有不存在sex域的文档

db.class1.remove({sex:{$exists:false}})

e.g.  删除第一条性别为w的文档

db.class1.remove({sex:'w'},true)

 

删除集合中所有文档

e.g. 删除class1中所有文档

db.class1.remove({})

 

修改文档

mysql : update table set ... where ...

mongodb: db.collection.update(query,update,upsert,multi)

 

update(query,update,upsert,multi)

功能 : 修改文档

参数 : query  筛选条件  用法同find

        update  要修改成什么内容 通常配合修改操作符(修改器)使用

upsert  布尔值,默认是false  如果query没有筛选到文档则不做任何操作

                如果设置为true 则如果query没有筛选到匹配文档则根据query和update内容插入新的文档

multi   布尔值 默认false 表示如果有多条符合条件文档则只修改第一条

        如果设置为true则表示修改所有符合条件文档

e.g.  将Tom的年龄修改为18

 db.class0.update({name:'Tom'},{$set:{age:18}})

e.g.  如果有name=Jame的文档则修改,如果没有则根据query update插入新的文档

 db.class0.update({name:'Jame'},{$set:{age:15}},true)

e.g.  修改所有年龄小于17的为18

db.class0.update({age:{$lt:17}},{$set:{age:18}},false,true)

补充 : 通过find查找结果,可以使用序列号获取具体某一项

e.g.  获取查找结果中的第3项

db.class0.find({},{_id:0})[2]

 

修改操作符(修改器)

$set

 修改一个域的值

   e.g.  Lily年龄修改为17

   db.class0.update({name:'Lily'},{$set:{age:17}})

 增加一个域

   e.g.  为jame增加sex域

   db.class0.update({name:'Jame'},{$set:{sex:'m'}})

 

$unset

  删除一个域

    e.g.  删除Abby 的sex域  sex后为空字符串

    db.class0.update({name:'Abby'},{$unset:{sex:''}})

 

$rename

  修改域的名称

    e.g.  将sex域名改为gender

    db.class0.update({},{$rename:{sex:'gender'}},false,true)

 

$setOnInsert

  如果使用update插入了文档,则将该修改器内容作为插入文档的一部分

  e.g.  如果插入了新文档则setOnInsert内容也会作为新文档一部分

  db.class0.update({name:'Jame'},{$set:{age:18},$setOnInsert:{gender:'m',tel:'123456'}},true)

 

$inc

  加法修改器

  e.g.  所有人年龄加1

  db.class0.update({},{$inc:{age:1}},false,true)

  * 参数可以是正数负数 整数小数

 

$mul

  乘法修改器

  e.g.

  db.class0.update({},{$mul:{age:0.5}},false,true)

  * 参数可以是正数负数 整数小数

 

$min

  如果筛选文档的指定域值小于min值则不修改,大于min值则修改为min值

  e.g.  Levi age如果大于20则修改为20

  db.class0.update({name:'Levi'},{$min:{age:20}})

 

$max

  如果筛选文档的指定域值大于max值则不修改,小于max值则修改为max值

  e.g. 如果Lenzer age 小于19则改为19

   db.class0.update({name:'Lenzer'},{$max:{age:19}})

 

数组修改器

$push  

  向数组中添加一项

  e.g.  给小红 score数组中添加一项91

  db.class1.update({name:'小红'},{$push:{score:91}})

 

$pushAll

  向数组中添加多项

  e.g.

  db.class1.update({name:'小乔'},{$pushAll:{score:[94,10]}})

 

$pull

   从数组中删除一项

   e.g.  从数组中删除一项

   db.class1.update({name:'小红'},{$pull:{score:78}})

 

$pullAll

   从数组中删除多项

   e.g.

   db.class1.update({name:'小乔'},{$pullAll:{score:[92,10]}})

 

$each

 对多个值逐个进行操作

 e.g.  分别插入99  10

 db.class1.update({name:'小乔'},{$push:{score:{$each:[99,10]}}})

 

$position

  指定插入位置

  e.g.  将67 插入到数组1号位置

  db.class1.update({name:'小明'},{$push:{score:{$each:[67],$position:1}}})

 

$sort

  数组排序

  e.g.  将说有score域的数组降序排序

  db.class1.update({},{$push:{score:{$each:[],$sort:-1}}},false,true)

 

$pop

  弹出一项 1表示弹出最后一项  -1弹出第一项

  e.g.  删除小明score中第一项

   db.class1.update({name:'小明'},{$pop:{score:-1}})

 

$addToSet

  向数组中添加一项 但是不能添加重复的内容

  e.g. 如果数组中没有81 则添加81

  db.class1.update({name:'小刚'},{$addToSet:{score:81}})

 

时间数据类型

mongo中存储时间大多为 ISODate

存储当前时间方法

   1. new Date()  自动生成当前时间

     e.g.  

     db.class2.insert({book:'Python入门',date:new Date()})

   2. ISODate()  自动生成当前时间

     e.g.

     db.class2.insert({book:'Python精通',date:ISODate()})

   3. Date()   将系统时间转换为字符串

     e.g.

     db.class2.insert({book:'Python疯狂',date:Date()})

指定时间

   ISODate()

   功能 : 生成mongo标准时间类型数据

   参数 : 如果不传参默认为当前时间

           传参表示指定时间

     “2018-01-01 12:12:12”

     "20180101 12:12:12"

     "20180101"

   e.g.

   db.class2.insert({book:'Python崩溃',date:ISODate("2018-07-01 11:15:56")})

 

时间戳

valueOf()

获取某个时间的时间戳

  e.g.  获取当前标准时间时间戳

    db.class2.insert({book:'Python涅槃',date:ISODate().valueOf()})

 

Null 类型

值   null

1.  如果某个域存在却没有值可以赋值为null

   e.g.  

   db.class2.insert({book:'Python死去活来',price:null})

2. 可以查找某个域不存在的情况

   e.g. 如果date域不存在也能find到

   db.class2.find({date:null})

 

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值