NoSQL学习笔记(三)修改语句和修改器


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有两个作用:

  1. 当设置的字段存在时,设置/修改字段的值
  2. 当设置的字段不存在时,创建新的字段并设置值

    db.students.update(
     {},
     {
         $set:{//可以同时设置多个值
             isLeave:false,
             isReal:false
    }},
    )

$unset

unset有两个作用:

  1. 当查询条件不为空时,置空某字段;

    db.students.update(
     {stuname:'郑老师'},
     {$unset:{
         stuage:null
     }}
    )
  2. 当查询条件为空时,删除该字段

    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 
}

声明:奋斗小刘|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - NoSQL学习笔记(三)修改语句和修改器


Make Everyday Count