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