MongoDB之資料更新(修改器)
對MongoDB資料庫而言,資料的修改會牽扯到內容的變更,結構的變更(包含有陣列)。所以在進行MongoDB設計的時候就提供有一系列修改器的應用。之前使用的“$set”就是一個修改器。
1、$inc:主要針對於一個數字欄位,增加某個數字欄位的資料內容:
語法:{"$inc":{"成員":"內容"}}
範例:將年齡為30歲的一個員工的薪水一律1000,年齡加1歲
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 31,
"sal" : 8999,
"loc" : "北京"
}
2、$set:進行內容的重新設定:
語法:{"$set":{"成員":"新內容"}}
範例:將年齡是30歲的某個人員的薪水修改為7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京"
}
3、$unset:刪除某個成員的內容:
語法:{"$unset":{"成員":1}}
範例:刪除“孫三”的年齡和薪水資訊
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
> db.emp.update({"name":"孫三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳"
}
4、$push:相當於將內容追加到指定的成員之中(基本上是陣列):
語法:{"$push":{"成員":value}}
範例:向“孫三”新增2門課程資訊(此時孫三資訊下沒有course資訊)
> db.emp.update({"name":"孫三"},{"$push":{"course":["語文","數學"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
]
}
範例:向“李四”新增一門課程資訊(此時李四資訊下沒有course資訊)
> db.emp.update({"name":"李四"},{"$push":{"course":"語文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京",
"course" : [
"語文"
]
}
範例:向“劉A”的課程追加一個“美術”
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治"
]
}
> db.emp.update({"name":"劉A"},{"$push":{"course":"美術"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治",
"美術"
]
}
就是進行陣列資料的新增操作使用的。如果沒有陣列則進行新的陣列的建立,如果有則進行內容的增加。
5、$pushAll:與“$push”是類似的,可以一次追加多個內容到陣列裡面:
語法:{"$pushAll":{"成員":陣列內容}}
範例:向"週五"裡面新增多個課程內容
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
> db.emp.update({"name":"週五"},{"$pushAll":{"course":["美術","音樂"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美術",
"音樂"
]
}
6、$addToSet:向陣列裡面增加一個新的內容,只有這個內容不存在的時候才會增加
語法:{"$addToSet":{成員:內容}}
範例:向“週五”的資訊增加新的內容
> db.emp.update({"name":"週五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美術",
"音樂",
"舞蹈"
]
}
此時會判斷要增加的內容在陣列裡面是否存在,如果不存在則向陣列之中追加內容,如果存在則不做任何修改操作。
7、$pop:刪除陣列內的資料
語法:{"$pop":{成員:內容}},內容如果設定為-1表示刪除第一個,如果內容設定為1表示刪除最後一個
範例:刪除週五的第一個課程
> db.emp.update({"name":"週五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音樂",
"舞蹈"
]
}
範例:刪除週五的最後一個課程
> db.emp.update({"name":"週五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音樂"
]
}
8、$pull:從陣列內刪除一個指定內容的資料
語法:{"$pull":{成員:資料}},進行資料比對的,如果是此資料是刪除
範例:刪除王五的音樂課程資訊
> db.emp.update({"name":"週五"},{"$pull":{"course":"音樂"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [ ]
}
9、$pullAll:一次性刪除多個內容
語法:{"$pullAll":{成員:[資料,資料,...]}}
範例:刪除“劉A”中的三門課程
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治",
"美術"
]
}
> db.emp.update({"name":"劉A"},{"$pullAll":{"course":["語文","數學","英語"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"音樂",
"政治",
"美術"
]
}
10、$rename:為成員名稱重新命名
語法:{"$rename":{舊的成員名稱:新的成員名稱}}
範例:將“孫三”的name成員名稱修改為“姓名”
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
]
}
> db.emp.update({"name":"孫三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
],
"姓名" : "孫三"
}
在整個MongoDB資料庫裡面,提供的修改器的支援很全面。
1、$inc:主要針對於一個數字欄位,增加某個數字欄位的資料內容:
語法:{"$inc":{"成員":"內容"}}
範例:將年齡為30歲的一個員工的薪水一律1000,年齡加1歲
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 31,
"sal" : 8999,
"loc" : "北京"
}
2、$set:進行內容的重新設定:
語法:{"$set":{"成員":"新內容"}}
範例:將年齡是30歲的某個人員的薪水修改為7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京"
}
3、$unset:刪除某個成員的內容:
語法:{"$unset":{"成員":1}}
範例:刪除“孫三”的年齡和薪水資訊
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
> db.emp.update({"name":"孫三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳"
}
4、$push:相當於將內容追加到指定的成員之中(基本上是陣列):
語法:{"$push":{"成員":value}}
範例:向“孫三”新增2門課程資訊(此時孫三資訊下沒有course資訊)
> db.emp.update({"name":"孫三"},{"$push":{"course":["語文","數學"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
]
}
範例:向“李四”新增一門課程資訊(此時李四資訊下沒有course資訊)
> db.emp.update({"name":"李四"},{"$push":{"course":"語文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京",
"course" : [
"語文"
]
}
範例:向“劉A”的課程追加一個“美術”
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治"
]
}
> db.emp.update({"name":"劉A"},{"$push":{"course":"美術"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治",
"美術"
]
}
就是進行陣列資料的新增操作使用的。如果沒有陣列則進行新的陣列的建立,如果有則進行內容的增加。
5、$pushAll:與“$push”是類似的,可以一次追加多個內容到陣列裡面:
語法:{"$pushAll":{"成員":陣列內容}}
範例:向"週五"裡面新增多個課程內容
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
> db.emp.update({"name":"週五"},{"$pushAll":{"course":["美術","音樂"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美術",
"音樂"
]
}
6、$addToSet:向陣列裡面增加一個新的內容,只有這個內容不存在的時候才會增加
語法:{"$addToSet":{成員:內容}}
範例:向“週五”的資訊增加新的內容
> db.emp.update({"name":"週五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美術",
"音樂",
"舞蹈"
]
}
此時會判斷要增加的內容在陣列裡面是否存在,如果不存在則向陣列之中追加內容,如果存在則不做任何修改操作。
7、$pop:刪除陣列內的資料
語法:{"$pop":{成員:內容}},內容如果設定為-1表示刪除第一個,如果內容設定為1表示刪除最後一個
範例:刪除週五的第一個課程
> db.emp.update({"name":"週五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音樂",
"舞蹈"
]
}
範例:刪除週五的最後一個課程
> db.emp.update({"name":"週五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音樂"
]
}
8、$pull:從陣列內刪除一個指定內容的資料
語法:{"$pull":{成員:資料}},進行資料比對的,如果是此資料是刪除
範例:刪除王五的音樂課程資訊
> db.emp.update({"name":"週五"},{"$pull":{"course":"音樂"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"週五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "週五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [ ]
}
9、$pullAll:一次性刪除多個內容
語法:{"$pullAll":{成員:[資料,資料,...]}}
範例:刪除“劉A”中的三門課程
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"語文",
"數學",
"英語",
"音樂",
"政治",
"美術"
]
}
> db.emp.update({"name":"劉A"},{"$pullAll":{"course":["語文","數學","英語"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "劉A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"音樂",
"政治",
"美術"
]
}
10、$rename:為成員名稱重新命名
語法:{"$rename":{舊的成員名稱:新的成員名稱}}
範例:將“孫三”的name成員名稱修改為“姓名”
> db.emp.find({"name":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
]
}
> db.emp.update({"name":"孫三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孫三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"語文",
"數學"
]
],
"姓名" : "孫三"
}
在整個MongoDB資料庫裡面,提供的修改器的支援很全面。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2144098/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB之資料更新(更新函式)MongoDB函式
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- mongoDB資料庫之聚合MongoDB資料庫
- MongoDB之資料刪除MongoDB
- MongoDB之資料增加操作MongoDB
- MongoDB之資料查詢(資料排序)MongoDB排序
- MongoDB之資料查詢操作MongoDB
- MongoDB之資料查詢(陣列)MongoDB陣列
- MongoDB之資料查詢(巢狀集合)MongoDB巢狀
- MongoDB之資料查詢(分頁顯示)MongoDB
- MongoDB之資料查詢(正規表示式)MongoDB
- MongoDB之資料查詢(關係運算)MongoDB
- MongoDB之資料查詢(邏輯運算)MongoDB
- MongoDB之資料查詢(範圍運算)MongoDB
- MongoDB之資料查詢(欄位判斷)MongoDB
- Oracle兩表之間資料更新Oracle
- mongodb 插入資料MongoDB
- MongoDB資料庫MongoDB資料庫
- Python爬蟲之使用MongoDB儲存資料Python爬蟲MongoDB
- nodejs之MongoDB 非關係型資料庫NodeJSMongoDB資料庫
- MongoDB之資料查詢(where條件過濾)MongoDB
- Mongodb高階更新MongoDB
- MongoDB更新(update)操作MongoDB
- nodejs操作mongodb資料庫(mongodb)NodeJSMongoDB資料庫
- mongodb資料庫中插入資料MongoDB資料庫
- MongoDB 資料庫安全之使用者密碼修改MongoDB資料庫密碼
- 分散式文件儲存資料庫之MongoDB索引管理分散式資料庫MongoDB索引
- 分散式文件儲存資料庫之MongoDB副本集分散式資料庫MongoDB
- MongoDB 資料庫操作MongoDB資料庫
- mongodb資料庫操作MongoDB資料庫
- Spring Boot實戰系列(2)資料儲存之NoSQL資料庫MongoDBSpring BootSQL資料庫MongoDB
- 分散式文件儲存資料庫之MongoDB分片叢集分散式資料庫MongoDB
- 分散式文件儲存資料庫之MongoDB訪問控制分散式資料庫MongoDB
- MySQL講義第8講——資料更新之 DELETEMySqldelete
- 初試MongoDB資料庫MongoDB資料庫
- mongodb 如何建立資料庫MongoDB資料庫
- Mongodb資料遷移步驟MongoDB
- 快速掌握 MongoDB 資料庫MongoDB資料庫