MongoDB之資料更新(更新函式)
對於MongoDB而言,資料的更新是一件很麻煩的事情,如果在實際工作當中,真的具有此類的操作支援,那麼最好的做法:刪掉在插入。
在MongoDB裡面對於資料的更新操作提供了兩類函式:save()、update()
如果要修改資料最直接的使用函式就是update()函式,但是這個函式的語法要求很麻煩。
語法:db.集合.update(更新條件,新的物件資料(更新運算子),upsert,multl)
● upsert:如果要更新的資料不存在,則增加一條新的內容(true為增加,false為不增加)。
● multi:表示是否只更新滿足條件的第一行記錄,如果設定為false,只更新第一條,如果設定為true全更新。
範例:更新存在的資料---將年齡是30歲的薪水更新為8000(此時會返回多條資料)
只更新第一條資料:
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 1000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,false);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
所有滿足條件的資料都更新:
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,true);
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 4 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
範例:更新不存在的資料
> db.emp.update({"age":55},{"$set":{"name":"不存在"}},true,false);
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5991629aca6455d4a46870f6")
})
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
此時相當於進行了資料的建立。
那麼除了update()之外,還提供了一個save()函式,這個函式的功能與更新不存在的內容相似。
範例:使用save()操作
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 56 }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56,"name":"stone"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{
"_id" : ObjectId("5991629aca6455d4a46870f6"),
"age" : 56,
"name" : "stone"
}
使用save,只會保留在save中出現的欄位。如果資料不存在,則插入。
> db.emp.save({"age":58,"name":"stone1"});
WriteResult({ "nInserted" : 1 })
> db.emp.find({"age":58}).pretty();
{
"_id" : ObjectId("599164db0184ff511bf02b96"),
"age" : 58,
"name" : "stone1"
}
對應的id資料存在了,就是更新操作。要儲存的資料不存在(不能儲存"_id"),就變成了增加操作。
建議使用update,儘量少用save。
在MongoDB裡面對於資料的更新操作提供了兩類函式:save()、update()
如果要修改資料最直接的使用函式就是update()函式,但是這個函式的語法要求很麻煩。
語法:db.集合.update(更新條件,新的物件資料(更新運算子),upsert,multl)
● upsert:如果要更新的資料不存在,則增加一條新的內容(true為增加,false為不增加)。
● multi:表示是否只更新滿足條件的第一行記錄,如果設定為false,只更新第一條,如果設定為true全更新。
範例:更新存在的資料---將年齡是30歲的薪水更新為8000(此時會返回多條資料)
只更新第一條資料:
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 1000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,false);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
所有滿足條件的資料都更新:
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,true);
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 4 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
範例:更新不存在的資料
> db.emp.update({"age":55},{"$set":{"name":"不存在"}},true,false);
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5991629aca6455d4a46870f6")
})
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
此時相當於進行了資料的建立。
那麼除了update()之外,還提供了一個save()函式,這個函式的功能與更新不存在的內容相似。
範例:使用save()操作
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 56 }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56,"name":"stone"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{
"_id" : ObjectId("5991629aca6455d4a46870f6"),
"age" : 56,
"name" : "stone"
}
使用save,只會保留在save中出現的欄位。如果資料不存在,則插入。
> db.emp.save({"age":58,"name":"stone1"});
WriteResult({ "nInserted" : 1 })
> db.emp.find({"age":58}).pretty();
{
"_id" : ObjectId("599164db0184ff511bf02b96"),
"age" : 58,
"name" : "stone1"
}
對應的id資料存在了,就是更新操作。要儲存的資料不存在(不能儲存"_id"),就變成了增加操作。
建議使用update,儘量少用save。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2144097/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB之資料更新(修改器)MongoDB
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- Mongodb高階更新MongoDB
- MongoDB更新(update)操作MongoDB
- java8函數語言程式設計筆記-破壞式更新和函式式更新Java函數程式設計筆記函式
- Oracle兩表之間資料更新Oracle
- 分散式 | dble後設資料更新同步分散式
- PHP的常用函式 持續更新PHP函式
- 資料分析中常用小函式彙總【持續更新,個人筆記。。。】函式筆記
- indexedDB 更新資料Index
- MySQL資料更新MySql
- 分析函式的應用(更新版)函式
- Mongodb 6.0更新文件MongoDB
- 如何批量更新資料
- pymysql批量更新資料MySql
- 資料庫-批次更新資料庫
- 資料庫-批量更新資料庫
- MongoDB之資料查詢(正規表示式)MongoDB
- MySQL講義第8講——資料更新之 DELETEMySqldelete
- 【資料庫之函式依賴】資料庫函式
- oracle批量新增更新資料Oracle
- flask如何更新資料庫Flask資料庫
- Hive 資料更新時間Hive
- Django RESTFramework——更新資料 (5)DjangoRESTFramework
- Mysql高效插入/更新資料MySql
- ListView動態更新資料View
- 用SQL更新資料(轉)SQL
- vue3 - 使用reactive定義響應式資料進行資料修改賦值時,資料更新但檢視不更新VueReact賦值
- 【少用會忘】PHP 函式筆記(持續更新)PHP函式筆記
- 前端常用的工具類函式, 持續更新中前端函式
- Python3常用函式速查【持續更新】Python函式
- Django筆記二十七之資料庫函式之文字函式Django筆記資料庫函式
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- MongoDB 集合的插入、更新、刪除操作MongoDB
- 分散式文件儲存資料庫之MongoDB索引管理分散式資料庫MongoDB索引
- 分散式文件儲存資料庫之MongoDB副本集分散式資料庫MongoDB
- SAP 資料更新的觸發
- 個人資料收集(長期更新)