NoSQL学习笔记(三)修改语句和修改器
几种更新语句
update
使用update更新单个集合db.students.update( {stuname:'小托'}, {$set: {stuage:24} } )使用update更新多个集合:
db.students.update( {}, //无条件查询,默认全部集合 {$set:{isLeave:false}}, {multi:true}//更新多个集合 )upsert:当更新条件的文档不存在时,创建新的文档
db.students.update( {stuname:'郑老师'}, {$set:{ isLeave:false, stuage:18, stuname:'郑老师' }}, {upsert:true} )
$set
关于修改器:修改器是修改某个字段值的关键字统称,如:$set,$unset,$inc都属于修改器。
set有两个作用:
- 当设置的字段存在时,设置/修改字段的值
 当设置的字段不存在时,创建新的字段并设置值
db.students.update( {}, { $set:{//可以同时设置多个值 isLeave:false, isReal:false }}, )
$unset
unset有两个作用:
当查询条件不为空时,置空某字段;
db.students.update( {stuname:'郑老师'}, {$unset:{ stuage:null }} )当查询条件为空时,删除该字段
db.students.updateMany( {}, {$unset:{sex:null}} )
$inc
定义:用于步进增加某字段的值,该值为整型。
eg1:创建一个集合,有一个字段page count(访问量)
db.pageviews.insert({
    webname:'新浪',
    url:'ww.sina.com.cn',
    pagecount:0
}
)db.pageviesw.update(
    {url:'www.sina.com.cn'},
    {
        $inc:{
            pagecount:1
        }
    }
)数组修改器:$push、$each、$addToSet
eg:给学生添加一个字段:aihao
db.students.update(
    {stuname:'小明'},
    {
        $set:{aihao:'足球'}
}
)$push
给小明添加一个爱好:篮球
db,.students.update(
    {name:'小明'},
    {
        $push:{
        aihao:'篮球'
    }
}
)$each
$each是一种迭代器
eg:为小明添加2个爱好:乒乓球,篮球
db.students.update(
    {stuname:'小明'},
    {
        $push:{
            aihao:{
                $each:['乒乓球','排球']
            }
        }
    }
)$addToSet
数组(list)的元素是可以重复的,要想元素不重复,可以设置成集合(set)类型,用$addToSet。
db.students.update(
{stuname:'小卓'},
{
    $addToSet:{aihao:'写文'}
}
)对list类型的字段进行$addToSet时,list自动转化为set,自动去重$addToSet同样可以跟$each连用
db.students.update(
{stuname:'小李'},
{
    $addToSet:{
        aihao:{
            $each:['台球','排球']
        }
    }
}
)总结:
- $push允许添加同一个值到数组中
 - $addToSet只能有一个值在数据中,即数组中值的唯一性
 - $each必须配合$push或$addToSet联合使用
 
其他常用的修改器
$min
作用:
- 若查询字段存在:
若指定的值小于字段的当前值,则将字段的$min值更新为指定值。 - 若查询字段不存在:
将该字段设置为指定值 
例:对于以下的简单文档:
{ 
    _id: 1, 
    highScore: 800, 
    lowScore: 200 
}字段lowScore值为200,进行以下修改操作以后:
db.scores.update( 
    { _id: 1 }, 
    { $min: { 
        lowScore: 150 
        } 
    } 
)值修改为:
{ 
    _id: 1, 
    highScore: 800, 
    lowScore: 150 
}但如果再对他进行如下操作:
db.scores.update( 
    { _id: 1 }, 
    { $min: { 
        lowScore: 250
        } 
    } 
)该文档的值并不会变。
{ 
    _id: 1, 
    highScore: 800, 
    lowScore: 150 
}$min也适用于对日期作比较。
{
  _id: 1,
  desc: "crafts",
  dateEntered: ISODate("2013-10-01T05:00:00Z")
}db.tags.update(
   { _id: 1 },
   { $min: { dateEntered: new Date("2013-09-25") } }
){
  _id: 1,
  desc: "crafts",
  dateEntered: ISODate("2013-09-25T00:00:00Z")
 }$max
其作用与$min相似。
$mul
将字段的值乘以一个数字。
对于以下文档:
{  
    "_id"  :  1 ,  
    "item"  :  "ABC" ,  
    "price"  :  NumberDecimal ( "10.99" ),  
    "qty"  :  25  
}执行如下更新语句:
db.products.update(
   { _id: 1 },
   { $mul: { price: NumberDecimal("1.25"), qty: 2 } }
)文档结果如下:
{ 
    "_id" : 1, 
    "item" : "ABC", 
    "price" : NumberDecimal("13.7375"), 
    "qty" : 50 
}		

Comments | NOTHING