NoSQL_MongoDB_⽂档的修改_详解
以下的资料整理⾃极客学院的教程。
MongoDB的修改操作与⼀般的数据库有些许的不同,默认的修改语句(不加参数)修改的单条记录,这点值得注意。update语句讲解
upsert  默认参数 {upsert:false}
multi 默认参数 {multi:false}
验证如下:
multi参数默认false
更新多个的⽰例语句:
//批量更新操作-写法1
//db.user.update({name:"sunzhenhua"},{$set:{name:"szh"}},false,true)
//批量更新操作-写法2
db.user.update({name:"szh"},{$set:{name:"zhs"}},{multi:true})
update的返回值讲解
MongoDB的⼀系列更新操作符
⽰例:
//连接数据库
dbService = connect("localhost:27017");
//选择插⼊集合
db = SiblingDB("jike");
//创建bulk对象⽤于批量插⼊
db.update_test.drop();
var bulk = db.update_test.initializeUnorderedBulkOp();
//测试数据
批量更新sql语句var doc1=
{
_id:1,
name:"xiaoli",
age:20,
address:
{
province:"GuangDong",
city:"ShenZhen"
}
}
bulk.insert(doc1);
var doc2=
{
_id:2,
name:"xiaoli",
age:20,
address:
{
province:"GuangDong",
city:"ShenZhen"
}
}
bulk.insert(doc2);
//下⾯执⾏插⼊操作
print("========update - $set操作符的使⽤=======")
/*
{ $set:{field1:value1,....} }
set操组符⽤于修改⼀个字段的值,如果这个字段不存在的话,则会创建它。
注意:使⽤$set操作符⼀次可以更新⽂档的多个字段
*/
var result = db.update_test.update(
{ name:"xiaoli" },  //更新条件
{                    //更新内容
$set:
{
"name":"xiaoli_update",
"age":28
}
}
,{multi:true}
);
printjson( result );
var cursor = db.update_test.find({});
Array())
print("========update -不使⽤更新操作符=======")
/*
如果update 的第⼆个参数不使⽤更新操作符,后⾯的⽂档会替换掉query返回的⽂档。
*/
var result = db.update_test.update(
{_id:1},    //更新条件
{age: 26 }  //更新内容
);
printjson( result );
var cursor = db.update_test.find({});
Array())
print("========update - $inc操作符的使⽤=======")
/*
{$inc:{"⽂档的键":待增加的值,....}}
inc操作符⽤来增加(或减少)已有键的值,如果这个字段不存在的话,则会⾃动创建。
注意:1.$inc键的值必须为数字,只能⽤于整型、长整型或浮点数类型。
2.$inc键的值为负数的时,会减少已有键的值。
3.⼀次可以更新⽂档的多个字段
*/
var result = db.update_test.update(
{_id:1},  //更新条件
{        //更新内容
$inc:
{
"age":2
}
}
);
printjson( result );
var cursor = db.update_test.find({});
Array())
print("========update - $min操作符的使⽤=======")
/*
{$min:{filed1:value1,.....}}
如果$min操作符中value1的值⼩于使⽤query条件返回的⽂档中filed1字段对应值的话,就使⽤value1来替换原有⽂档的值;如果使⽤query条件返回的⽂档中filed1字段的值不存在的话,就会⽤value1来创建该字段。
注意:⼀次可以更新⽂档的多个字段
*/
var result = db.update_test.update(
{_id:1},  //更新条件
{        //更新内容
$min:
{
"age":16
}
}
);
printjson( result );
var cursor = db.update_test.find({});
Array())
print("========update - $currentDate操作符的使⽤=======")
/*
{ $currentDate:{<field1>:<typeSpecification1,...}  }
currentDate 操作符可以将filed1字段的值更新为当前的最新时间
主要⽤于记录操作的时间,⽀持Date和timestamp两种类型
默认时间⽤Date类型来表⽰,也可以通过使⽤$type操作符来显式的指定⽇期格式
隐式的:{$currentDate: { field1: true} }  field1字段的值会被更新为Date类型时间显式的:{$currentDate: { { $type: "date" } }  或者
{$currentDate: { { $type: "timestamp" } }
注意:1.使⽤$currentDate操作符⼀次可以更新⽂档的多个字段
2.如果field指定的字段不存在的话,会⾃动创建
3.使⽤$currentDate操作符,主要⽤来记录操作时间
*/
var result = db.update_test.update(
{_id:1},  //更新条件
{        //更新内容
$currentDate:
{
"optime_1":true,
"optime_2":{$type:"timestamp"}
}
}
);
printjson( result );
var cursor = db.update_test.find({});
Array())
对于内嵌⽂档的更新