第二章节 MongoDB的基本命令
MongoDB基本命令
- 1. 數(shù)據(jù)庫(kù)的命令
- 2.集合的命令
- 3.文檔的CRUD
- 1.文檔的插入
- 2.文檔的基本查詢
- 3.文檔的更新
- 4.刪除文檔
- 4.文檔的分頁(yè)查詢
- 1. count查詢
- 2. 分頁(yè)列表查詢
- 3.排序查詢
- 5.文檔的高級(jí)查詢
- 1.正則查詢/模糊查詢
- 2.比較查詢
- 3.包含查詢
- 4.條件連接查詢
- 6.總結(jié)
1. 數(shù)據(jù)庫(kù)的命令
(1)選擇和創(chuàng)建數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名稱 # 如果數(shù)據(jù)庫(kù)不存在則自動(dòng)創(chuàng)建 use articledb(2)查看有權(quán)限查看的所有數(shù)據(jù)庫(kù)命令
show dbs 或 show databases注意: 在 MongoDB 中,集合只有在內(nèi)容插入后才會(huì)創(chuàng)建! 就是說(shuō),創(chuàng)建集合(數(shù)據(jù)表)后要再插入一個(gè)文檔(記錄),集合才會(huì)真正創(chuàng)建。
(3)查看當(dāng)前正在使用的數(shù)據(jù)庫(kù)命令
dbMongoDB 中默認(rèn)的數(shù)據(jù)庫(kù)為 test,如果你沒(méi)有選擇數(shù)據(jù)庫(kù),集合將存放在 test 數(shù)據(jù)庫(kù)中。
(4)刪除已經(jīng)持久化的數(shù)據(jù)庫(kù)
db.dropDatabase()2.集合的命令
(1)集合的顯示創(chuàng)建及查看
# 顯示創(chuàng)建(了解) # 語(yǔ)法格式 db.createCollection(name) # name 標(biāo)識(shí)集合的名稱#查看當(dāng)前庫(kù)中的表 show collections 或 show tables集合的命名規(guī)范:
-
集合名不能是空字符串""。
-
集合名不能含有\(zhòng)0字符(空字符),這個(gè)字符表示集合名的結(jié)尾。
-
集合名不能以"system."開頭,這是為系統(tǒng)集合保留的前綴。
-
用戶創(chuàng)建的集合名字不能含有保留字符。有些驅(qū)動(dòng)程序的確支持在集合名里面包含,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。除 非你要訪問(wèn)這種系統(tǒng)創(chuàng)建的集合,否則千萬(wàn)不要在名字里出現(xiàn)$。
(2)集合的隱式創(chuàng)建
當(dāng)向一個(gè)集合中插入一個(gè)文檔的時(shí)候,如果集合不存在,則會(huì)自動(dòng)創(chuàng)建集合。
(3)集合的刪除
語(yǔ)法格式
db.collection.drop() 或 db.集合.drop()返回值
如果成功刪除選定集合,則 drop() 方法返回 true,否則返回 false。
eg:刪除mycollection集合
db.mycollection.drop();3.文檔的CRUD
1.文檔的插入
1)單個(gè)插入
語(yǔ)法:
# 使用insert() 或 save() 方法向集合中插入文檔,語(yǔ)法如下:db.collection.insert(<document or array of documents>,{writeConcern: <document>,ordered: <boolean>} )參數(shù):
| document | document or array | 要插入到集合中的文檔或文檔數(shù)組。((json格式) |
| writeConcern | document | |
| ordered | boolean | 可選。如果為真,則按順序插入數(shù)組中的文檔,如果其中一個(gè)文檔出現(xiàn)錯(cuò)誤,MongoDB將返回而 不處理數(shù)組中的其余文檔。如果為假,則執(zhí)行無(wú)序插入,如果其中一個(gè)文檔出現(xiàn)錯(cuò)誤,則繼續(xù)處理 數(shù)組中的主文檔。在版本2.6+中默認(rèn)為true |
【示例】
db.comment.insert({"articleid":"100000","content":"今天天氣真好,陽(yáng)光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})返回值為以下內(nèi)容說(shuō)明插入成功
WriteResult({ "nInserted" : 1 })2)批量插入
語(yǔ)法:
db.collection.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>} )參數(shù):
| document | document or array | 要插入到集合中的文檔或文檔數(shù)組。((json格式) |
| writeConcern | document | |
| ordered | boolean | 可選。如果為真,則按順序插入數(shù)組中的文檔,如果其中一個(gè)文檔出現(xiàn)錯(cuò)誤,MongoDB將返回而 不處理數(shù)組中的其余文檔。如果為假,則執(zhí)行無(wú)序插入,如果其中一個(gè)文檔出現(xiàn)錯(cuò)誤,則繼續(xù)處理 數(shù)組中的主文檔。在版本2.6+中默認(rèn)為true |
【示例】
db.comment.insertMany([{"_id":"1","articleid":"100001","content":"我們不應(yīng)該把清晨浪費(fèi)在手機(jī)上,健康很重要,一杯溫水幸福你我他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08-05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"},{"_id":"2","articleid":"100001","content":"我夏天空腹喝涼開水,冬天喝溫開水","userid":"1005","nickname":"伊人憔悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"},{"_id":"3","articleid":"100001","content":"我一直喝涼開水,冬天夏天都喝。","userid":"1004","nickname":"杰克船長(zhǎng)","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"},{"_id":"4","articleid":"100001","content":"專家說(shuō)不能空腹吃飯,影響健康。","userid":"1003","nickname":"凱撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"},{"_id":"5","articleid":"100001","content":"研究表明,剛燒開的水千萬(wàn)不能喝,因?yàn)闋C嘴。","userid":"1003","nickname":"凱撒","createdatetime":new Date("2019-08-06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"}]);如果某條數(shù)據(jù)插入失敗,將會(huì)終止插入,但已經(jīng)插入成功的數(shù)據(jù)不會(huì)回滾掉。
因?yàn)榕坎迦胗捎跀?shù)據(jù)較多容易出現(xiàn)失敗,因此,可以使用try catch進(jìn)行異常捕捉處理,測(cè)試的時(shí)候可以不處理。如(了解):
try { db.comment.insertMany([{"_id":"1","articleid":"100001","content":"我們不應(yīng)該把清晨浪費(fèi)在手機(jī)上,健康很重要,一杯溫水幸福你我他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08-05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"},{"_id":"2","articleid":"100001","content":"我夏天空腹喝涼開水,冬天喝溫開水","userid":"1005","nickname":"伊人憔悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"},{"_id":"3","articleid":"100001","content":"我一直喝涼開水,冬天夏天都喝。","userid":"1004","nickname":"杰克船長(zhǎng)","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"},{"_id":"4","articleid":"100001","content":"專家說(shuō)不能空腹吃飯,影響健康。","userid":"1003","nickname":"凱撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"},{"_id":"5","articleid":"100001","content":"研究表明,剛燒開的水千萬(wàn)不能喝,因?yàn)闋C嘴。","userid":"1003","nickname":"凱撒","createdatetime":new Date("2019-08-06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"}]); }catch(e){print(e); }2.文檔的基本查詢
語(yǔ)法格式如下:
db.collection.find(<query>, [projection])參數(shù):
| query | document | 可選。使用查詢運(yùn)算符指定選擇篩選器。若要返回集合中的所有文檔,請(qǐng)省略此參數(shù)或傳遞空文檔 ( {} )。 |
| projection | document | 可選。指定要在與查詢篩選器匹配的文檔中返回的字段(投影)。若要返回匹配文檔中的所有字段, 請(qǐng)省略此參數(shù)。 |
【示例】
1)查詢所有
db.comment.find() 或 db.comment.find({})這里你會(huì)發(fā)現(xiàn)每條文檔會(huì)有一個(gè)叫_id的字段,這個(gè)相當(dāng)于我們?cè)瓉?lái)關(guān)系數(shù)據(jù)庫(kù)中表的主鍵,當(dāng)你在插入文檔記錄時(shí)沒(méi)有指定該字段, MongoDB會(huì)自動(dòng)創(chuàng)建,其類型是ObjectID類型。
按照條件查詢
db.comment.find({userid:'1003'})按照條件查詢,只取第一條數(shù)據(jù)
db.comment.findOne({userid:'1003'})意思是只取對(duì)應(yīng)的字段
>db.comment.find({userid:"1003"},{userid:1,nickname:1}){ "_id" : "4", "userid" : "1003", "nickname" : "凱撒" } { "_id" : "5", "userid" : "1003", "nickname" : "凱撒" }默認(rèn) _id 會(huì)顯示。 如:查詢結(jié)果只顯示 、userid、nickname ,不顯示 _id :
>db.comment.find({userid:"1003"},{userid:1,nickname:1,_id:0}) { "userid" : "1003", "nickname" : "凱撒" } { "userid" : "1003", "nickname" : "凱撒" }3.文檔的更新
語(yǔ)法規(guī)則
db.collection.update(query, update, options) //或 db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>,collation: <document>,arrayFilters: [ <filterdocument1>, ... ],hint: <document|string> // Available starting in MongoDB 4.2} )參數(shù):
| query | document | 更新的選擇條件,當(dāng)upset:true時(shí),如果查詢使用了id條件,則MongoDB拒絕插入新文檔。 |
| update | document or pipeline | 要應(yīng)用的修改 |
| upsert | boolean | 可選,如果設(shè)置為true,查不到會(huì)新增一條,默認(rèn)false,查不到不會(huì)新增 |
| multi | boolean | 可選,如果設(shè)置為true,則更新所有查到的文檔,默認(rèn)false,只更新一個(gè)文檔。 |
【示例】
1)覆蓋修改
db.comment.update({_id:"1"},{likenum:NumberInt(1001)});執(zhí)行后,其他屬性丟了
2)局部修改
使用修改器$set來(lái)實(shí)現(xiàn),命令如下:
db.comment.update({_id:"3"},{$set:{likenum:NumberInt(1001)}});3)批量修改
更新所有用戶為 1003 的用戶的昵稱為 凱撒大帝 。
//默認(rèn)只修改第一條數(shù)據(jù) db.comment.update({userid:"1003"},{$set:{nickname:"凱撒2"}}) //修改所有符合條件的數(shù)據(jù) db.comment.update({userid:"1003"},{$set:{nickname:"凱撒大帝"}},{multi:true})4)列值增長(zhǎng)的更新
如果我們想實(shí)現(xiàn)對(duì)某列值在原有值的基礎(chǔ)上進(jìn)行增加或減少,可以使用 $inc 運(yùn)算符來(lái)實(shí)現(xiàn)。
需求:對(duì)3號(hào)數(shù)據(jù)的點(diǎn)贊數(shù),每次遞增1
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}});4.刪除文檔
語(yǔ)法結(jié)構(gòu)
db.集合名稱.remove(條件)刪除全部數(shù)據(jù)(慎用)
db.comment.remove({});刪除id為1的數(shù)據(jù)
db.comment.remove({_id:"1"});4.文檔的分頁(yè)查詢
1. count查詢
語(yǔ)法結(jié)構(gòu)
db.collection.count(query, options)【示例】
1)統(tǒng)計(jì)所有記錄數(shù)
db.comment.count()2)按條件查詢
db.comment.count({userid:"1003"})2. 分頁(yè)列表查詢
語(yǔ)法結(jié)構(gòu)
db.collection.find().limit(NUMBER).skip(NUMBER)【示例】
1)返回指定條數(shù),limit默認(rèn)20
db.comment.find().limit(3)2)跳過(guò)指定條數(shù),默認(rèn)值0
db.comment.find().skip(3)3)分頁(yè)需求
//第一頁(yè) db.comment.find().skip(0).limit(2) //第二頁(yè) db.comment.find().skip(2).limit(2) //第三頁(yè) db.comment.find().skip(4).limit(2)3.排序查詢
語(yǔ)法結(jié)構(gòu)
db.collection.find().sort({KEY:1}) 或 db.集合名稱.find().sort(排序方式)sort()方法進(jìn)行排序,使用1和-1來(lái)指定排序的方式,1為升序排列,-1為降序排列
【示例】
對(duì)userid降序排列,并對(duì)訪問(wèn)量進(jìn)行升序排列
db.comment.find().sort({userid:-1,likenum:1})提示:
skip(), limilt(), sort()三個(gè)放在一起執(zhí)行的時(shí)候,執(zhí)行的順序是先 sort(), 然后是 skip(),最后是顯示的 limit(),和命令編寫順序無(wú)關(guān)。
5.文檔的高級(jí)查詢
1.正則查詢/模糊查詢
語(yǔ)法格式
db.collection.find({field:/正則表達(dá)式/}) 或 db.集合.find({字段:/正則表達(dá)式/})提示:正則表達(dá)式是js的語(yǔ)法,直接量的寫法。
【示例】
1)查詢包含"開水"的所有文檔
db.comment.find({content:/開水/})2)查看評(píng)論內(nèi)容中以“專家”開頭的。
db.comment.find({content:/^專家/})2.比較查詢
<, <=, >, >= 這個(gè)操作符也是很常用的,格式如下:
db.集合名稱.find({ "field" : { $gt: value }}) // 大于: field > value db.集合名稱.find({ "field" : { $lt: value }}) // 小于: field < value db.集合名稱.find({ "field" : { $gte: value }}) // 大于等于: field >= value db.集合名稱.find({ "field" : { $lte: value }}) // 小于等于: field <= value db.集合名稱.find({ "field" : { $ne: value }}) // 不等于: field != value【示例】
查詢?cè)u(píng)論數(shù)大于700的
db.comment.find({likenum:{$gte:NumberInt(700)}});3.包含查詢
包含使用$in操作符。示例:查詢?cè)u(píng)論的集合中userid字段包含1003或1004的文檔
db.comment.find({userid:{$in:["1003","1004"]}})不包含使用$nin操作符。 示例:查詢?cè)u(píng)論集合中userid字段不包含1003和1004的文檔
db.comment.find({userid:{$nin:["1003","1004"]}})4.條件連接查詢
同事滿足兩個(gè)條件,(相當(dāng)于SQL的and)
$and:[ { },{ },{ } ]【示例】查詢?cè)u(píng)論集合中l(wèi)ikenum大于等于700 并且小于2000的文檔:
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})兩個(gè)條件是或者關(guān)系,(相當(dāng)于SQL的or)
$or:[ { },{ },{ } ]【示例】查詢?cè)u(píng)論集合中userid為1003,或者點(diǎn)贊數(shù)小于1000的文檔記錄
db.comment.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})6.總結(jié)
選擇切換數(shù)據(jù)庫(kù):use articledb 插入數(shù)據(jù):db.comment.insert({bson數(shù)據(jù)}) 查詢所有數(shù)據(jù):db.comment.find(); 條件查詢數(shù)據(jù):db.comment.find({條件}) 查詢符合條件的第一條記錄:db.comment.findOne({條件}) 查詢符合條件的前幾條記錄:db.comment.find({條件}).limit(條數(shù)) 查詢符合條件的跳過(guò)的記錄:db.comment.find({條件}).skip(條數(shù)) 修改數(shù)據(jù):db.comment.update({條件},{修改后的數(shù)據(jù)}) 或db.comment.update({條件},{$set:{要修改部分的字段:數(shù)據(jù)}) 修改數(shù)據(jù)并自增某字段值:db.comment.update({條件},{$inc:{自增的字段:步進(jìn)值}}) 刪除數(shù)據(jù):db.comment.remove({條件}) 統(tǒng)計(jì)查詢:db.comment.count({條件}) 模糊查詢:db.comment.find({字段名:/正則表達(dá)式/}) 條件比較運(yùn)算:db.comment.find({字段名:{$gt:值}}) 包含查詢:db.comment.find({字段名:{$in:[值1,值2]}})或db.comment.find({字段名:{$nin:[值1,值2]}}) 條件連接查詢:db.comment.find({$and:[{條件1},{條件2}]})或db.comment.find({$or:[{條件1},{條件2}]})告誡自己
多學(xué)習(xí),多做筆記,筆記很重要,不然3天過(guò)后,回來(lái)看,真的會(huì)忘記。
總結(jié)
以上是生活随笔為你收集整理的第二章节 MongoDB的基本命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 科学计算机是计算机最基本的应用,计算机基
- 下一篇: 云脉档案管理彻底解决纸质数据问题