摘要:學(xué)習(xí)筆記中文檔的增刪改本文所使用的版本為一插入文檔插入一個(gè)文檔語(yǔ)法向數(shù)據(jù)庫(kù)中的集合中插入一個(gè)文檔注字段是系統(tǒng)自動(dòng)生成的,也可以自己指定任何類型的字,但值不能重復(fù)。可以通過(guò)在執(zhí)行完每條命令之后執(zhí)行來(lái)檢查是否成功
MongoDB學(xué)習(xí)筆記(2)- Mongo Shell 中文檔的增、刪、改
本文所使用的MongoDB版本為 4.0.10
> db.version(); 4.0.10一、插入文檔 1. 插入一個(gè)文檔
語(yǔ)法: db..insert(document)
向 test 數(shù)據(jù)庫(kù)中的 user 集合中插入一個(gè)文檔:
> 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 字段是系統(tǒng)自動(dòng)生成的,也可以自己指定任何類型的字,但值不能重復(fù)。2. 插入多個(gè)文檔
語(yǔ)法: db..insert([ document1, document2, ..., documentN ])
向 test 數(shù)據(jù)庫(kù)中的 user 集合中插入多個(gè)文檔:
> 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 }二、刪除數(shù)據(jù)
語(yǔ)法: db..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 }三、修改數(shù)據(jù)
語(yǔ)法: update(條件,數(shù)據(jù), 是否新增, 是否修改多條)
修改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:如果沒(méi)有滿足查詢條件的記錄的話,是否新創(chuàng)建這條記錄注:如果有多條記錄滿足{"age":10},只有第一條記錄會(huì)被修改??梢栽O(shè)置第四個(gè)參數(shù)為true,修改所有的記錄。
修改數(shù)據(jù)時(shí)容易出錯(cuò)的地方
如有這樣的數(shù)據(jù):
{"_id" : 1 , "username" : "abc" , "age" : 20 , "sex" : "boy" }
想要修改年齡為22歲,錯(cuò)誤代碼如下:
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 : 加一個(gè)數(shù)字
把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 : 修改某一個(gè)字段,如果該字段不存在就增這個(gè)字段
修改Tom的電話號(hào)碼為10086,如果沒(méi)有這個(gè)字段就新增這個(gè)字段
> 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" }
修改數(shù)組
3. $push : 向數(shù)組中添加元素向 Tom 的好友中添加一個(gè)好友 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 : 從數(shù)組的首或尾取出數(shù)據(jù)
從abc的好友中刪除最后一個(gè)好友
> 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的好友中刪除第一個(gè)好友
> 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 : 刪除一個(gè)字段
刪除 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中修改、刪除、更新都是瞬間完成的,即客戶端只把命令發(fā)給服務(wù)器,但不會(huì)檢查這條命令是否執(zhí)行成功。
可以通過(guò)在執(zhí)行完每條命令之后執(zhí)行 getLastError 來(lái)檢查是否成功!
> db.runCommand({"getLastError": 1}) { "connectionId" : 1, "n" : 0, "syncMillis" : 0, "writtenTo" : null, "err" : null, "ok" : 1 }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106198.html
摘要:系列文章的安裝的命令操作的編程操作前面文章首先介紹了數(shù)據(jù)庫(kù)系統(tǒng)的安裝,接著介紹了的工具來(lái)操作數(shù)據(jù)庫(kù),掌握了命令行對(duì)數(shù)據(jù)庫(kù)的增刪改查,四個(gè)基本操作。現(xiàn)在來(lái)介紹,如何用編程語(yǔ)言來(lái)操作數(shù)據(jù)庫(kù)。 MongoDB 系列文章: MongoDB 的 yum 安裝 MongoDB 的命令操作 MongoDB 的編程操作 前面文章首先介紹了 MongoDB 數(shù)據(jù)庫(kù)系統(tǒng)的安裝,接著介紹了 MongoD...
摘要:文檔是的核心概念,文檔是操作數(shù)據(jù)庫(kù)的最小單元。等你了解這這些命令或者函數(shù),你再嘗試在腳本代碼中操作數(shù)據(jù)庫(kù),你會(huì)發(fā)現(xiàn)這種非常容易上手。 MongoDB 系列文章: MongoDB 的 yum 安裝 MongoDB 的命令操作 MongoDB 的編程操作 在介紹 MongoDB 的具體操作和使用之前,有必要介紹一些 MongoDB 的基本概念,有了這些基礎(chǔ)和知識(shí)鋪墊,后面的操作,才會(huì)掌...
摘要:前言上一篇中初階系列一用戶和權(quán)限介紹了用戶和權(quán)限,這一篇將介紹如何在中進(jìn)行增刪改查。這是初階系列的第二篇,接下來(lái)還有第三篇,借助,更優(yōu)雅地操作數(shù)據(jù)。 前言 上一篇中(mongoDB初階系列一:用戶和權(quán)限)介紹了用戶和權(quán)限,這一篇將介紹如何在node中進(jìn)行增刪改查。 準(zhǔn)備 首先,要在node中使用mongoDB,需要安裝MongoDB Driver,命令如下:npm install mo...
摘要:前言上一篇中初階系列一用戶和權(quán)限介紹了用戶和權(quán)限,這一篇將介紹如何在中進(jìn)行增刪改查。這是初階系列的第二篇,接下來(lái)還有第三篇,借助,更優(yōu)雅地操作數(shù)據(jù)。 前言 上一篇中(mongoDB初階系列一:用戶和權(quán)限)介紹了用戶和權(quán)限,這一篇將介紹如何在node中進(jìn)行增刪改查。 準(zhǔn)備 首先,要在node中使用mongoDB,需要安裝MongoDB Driver,命令如下:npm install mo...
摘要:數(shù)據(jù)模型取決于數(shù)據(jù)庫(kù)類型。僅支持位浮點(diǎn)數(shù),所以位整數(shù)會(huì)被自動(dòng)轉(zhuǎn)換為位浮點(diǎn)數(shù)。位浮點(diǎn)數(shù)中的數(shù)字都是這種類型。數(shù)字只能表示為雙精度數(shù)位浮點(diǎn)數(shù)的另外一個(gè)問(wèn)題是,有些位的整數(shù)并不能精確地表示為位浮點(diǎn)數(shù)。 MongoDB學(xué)習(xí)筆記(1)- MongoDB簡(jiǎn)介及數(shù)據(jù)類型 本文所使用的MongoDB版本為 4.0.10 > db.version(); 4.0.10 一、MongoDB 介紹 1. Mo...
閱讀 2137·2021-09-06 15:02
閱讀 1753·2021-08-13 15:02
閱讀 2319·2019-08-29 14:14
閱讀 1478·2019-08-26 13:55
閱讀 560·2019-08-26 13:46
閱讀 3415·2019-08-26 11:41
閱讀 533·2019-08-26 10:27
閱讀 3279·2019-08-23 15:28