MongoDB學習筆記(2)- Mongo Shell 中文件的增、刪、改
阿新 • • 發佈:2021-01-16
MongoDB學習筆記(2)- Mongo Shell 中文件的增、刪、改
本文所使用的MongoDB版本為 4.0.10
> db.version();
4.0.10
一、插入文件
1. 插入一個文件
語法: db.<collection>.insert(document)
向 test
資料庫中的 user
集合中插入一個文件:
> use test; switched to db test > db.user.insert({ "username" : "Tom", "age" : 10 }) WriteResult({ "nInserted" : 1 }) > db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
注: _id 欄位是系統自動生成的,也可以自己指定任何型別的字,但值不能重複。
2. 插入多個文件
語法: db.<collection>.insert([ document1, document2, ..., documentN ])
向 test
資料庫中的 user
集合中插入多個文件:
> db.user.insert([ ... { "username" : "Mary", "age" : 30 }, ... { "username" : "Martin", "age" : 40 }, ... { "username" : "kart", "age" : 50 }, ... { "username" : "Jack", "age" : 20 } ... ]) BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 4, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) > db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 } { "_id" : ObjectId("5d2f11b814077ad0dab139ca"), "username" : "Jack", "age" : 20 }
二、刪除資料
語法: db.<collection>.remove(條件)
刪除 user 集合中名字等於 “Jack” 的文件
> db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 } { "_id" : ObjectId("5d2f11b814077ad0dab139ca"), "username" : "Jack", "age" : 20 } > db.user.remove({ "username" : "Jack" }) WriteResult({ "nRemoved" : 1 }) > db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
三、修改資料
語法: update(條件,資料, 是否新增, 是否修改多條)
修改user 集合中年齡等於10的修改為20
方法一:
var u = db.user.findOne( { "age" : 10 } );
u.age = 20;
db.user.update( { "age" : 10 } , u ) 或 db.user.save(u);
> var u = db.user.findOne({ "age" : 10 })
> u.age = 20
20
> db.user.save(u)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 20 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
方法二:
db.user.update( query, object[, upsert_bool, multi_bool] )
> var u = db.user.findOne({ "age" : 20 })
> u.age = 10
10
> db.user.update({ "age" : 20 }, u)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
upsert_bool:如果沒有滿足查詢條件的記錄的話,是否新建立這條記錄
注:如果有多條記錄滿足{“age”:10},只有第一條記錄會被修改。可以設定第四個引數為true,修改所有的記錄。
修改資料時容易出錯的地方
如有這樣的資料:
{"_id" : 1 , "username" : "abc" , "age" : 20 , "sex" : "boy" }
想要修改年齡為22歲,錯誤程式碼如下:
var u = db.user.update({ "_id" : 1 }, { "age" : 22 })
記錄修改完之後變成:
{ "_id" : 1 , "age" : 22 }
正確的方法:
var u = db.user.find({ "_id" : 1 }); --> 取出記錄
u.age = 22; --> 在原記錄基本上修改
db.user.save(u) 或 db.user.update({ "_id" : 1 } , u)
四、修改器的使用
1. $inc : 加一個數字
把Tom的年齡加2
> db.user.update({ "username" : "Tom" }, { $inc : { "age" : 2 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12 }
2. $set : 修改某一個欄位,如果該欄位不存在就增這個欄位
修改Tom的電話號碼為10086,如果沒有這個欄位就新增這個欄位
> db.user.update({ "username" : "Tom" }, { $set : { "tel" : "10086" } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }
修改陣列
3. $push : 向陣列中新增元素
向 Tom 的好友中新增一個好友 Jack。
> db.user.update({ "username" : "Tom" }, { $push: { "friend" : "Jack" } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username": "Tom"}, { "username": 1, "friend": 1 })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack" ] }
4. $each : 遍歷操作元素
向 Tom 的好友中批量新增好友 “Mary”, “Jocker”。
> db.user.update({ "username" : "Tom" }, { $push : { "friend" : { $each : ["Mary", "Jocker"] } } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom" }, { "username" : 1, "friend" : 1 })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack", "Mary", "Jocker" ] }
5. $pop : 從陣列的首或尾取出資料
從abc的好友中刪除最後一個好友
> db.user.update({ "username" : "Tom" }, { $pop : { "friend" : 1 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom"}, { "username" : 1, "friend" : 1})
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack", "Mary" ] }
從abc的好友中刪除第一個好友
> db.user.update({ "username" : "Tom" }, { $pop : { "friend": -1 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom" }, { "username" : 1, "friend" : 1})
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Mary" ] }
6. $unset : 刪除一個欄位
刪除 Tom 的 friend 欄位
> db.user.update( { "username" : "Tom" }, { $unset : { "friend" : "" } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }
MongoDB中修改、刪除、更新都是瞬間完成的,即客戶端只把命令發給伺服器,但不會檢查這條命令是否執行成功。
可以通過在執行完每條命令之後執行 getLastError 來檢查是否成功!
> db.runCommand({"getLastError": 1})
{
"connectionId" : 1,
"n" : 0,
"syncMillis" : 0,
"writtenTo" : null,
"err" : null,
"ok" : 1
}