MongoDB常用命令

以吐槽表爲例講解MongoDB常用命令
在這裏插入圖片描述

選擇和創建數據庫

選擇和創建數據庫的語法格式:

use 數據庫名稱

如果數據庫不存在則自動創建
以下語句創建spit數據庫

use spitdb

插入與查詢文檔

插入文檔的語法格式:

db.集合名稱.insert(數據);

我們這裏可以插入以下測試數據:

db.spit.insert({content:"聽說十次方課程很給力呀",userid:"1011",nickname:"小
雅",visits:NumberInt(902)})

查詢集合的語法格式:

db.集合名稱.find()

如果我們要查詢spit集合的所有文檔,我們輸入以下命令:

db.spit.find()

這裏你會發現每條文檔會有一個叫_id的字段,這個相當於我們原來關係數據庫中表的主
鍵,當你在插入文檔記錄時沒有指定該字段,MongoDB會自動創建,其類型是ObjectID
類型。如果我們在插入文檔記錄時指定該字段也可以,其類型可以是ObjectID類型,也
可以是MongoDB支持的任意類型。

輸入以下測試語句:

db.spit.insert({_id:"1",content:"我還是沒有想明白到底爲啥出
錯",userid:"1012",nickname:"小明",visits:NumberInt(2020)});
db.spit.insert({_id:"2",content:"加班到半夜",userid:"1013",nickname:"凱
撒",visits:NumberInt(1023)});
db.spit.insert({_id:"3",content:"手機流量超了咋
辦?",userid:"1013",nickname:"凱撒",visits:NumberInt(111)});
db.spit.insert({_id:"4",content:"堅持就是勝利",userid:"1014",nickname:"諾
諾",visits:NumberInt(1223)});

如果我想按一定條件來查詢,比如我想查詢userid爲1013的記錄,怎麼辦?很簡單!只
要在find()中添加參數即可,參數也是json格式,如下:

db.spit.find({userid:'1013'})

如果你只需要返回符合條件的第一條數據,我們可以使用findOne命令來實現

db.spit.findOne({userid:'1013'})

如果你想返回指定條數的記錄,可以在find方法後調用limit來返回結果,例如:

db.spit.find().limit(3)

修改與刪除文檔

修改文檔的語法結構:

db.集合名稱.update(條件,修改後的數據)

如果我們想修改_id爲1的記錄,瀏覽量爲1000,輸入以下語句:

db.spit.update({_id:"1"},{visits:NumberInt(1000)})

執行後,我們會發現,這條文檔除了visits字段其它字段都不見了,爲了解決這個問題,
我們需要使用修改器$set來實現,命令如下:

db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}})

這樣就OK啦。

刪除文檔的語法結構:

db.集合名稱.remove(條件)

以下語句可以將數據全部刪除,請慎用

db.spit.remove({})

如果刪除visits=1000的記錄,輸入以下語句

db.spit.remove({visits:1000})

統計條數

統計記錄條件使用count()方法。以下語句統計spit集合的記錄數

db.spit.count()

如果按條件統計 ,例如:統計userid爲1013的記錄條數

db.spit.count({userid:"1013"})

模糊查詢

MongoDB的模糊查詢是通過正則表達式的方式實現的。格式爲:

/模糊查詢字符串/

例如,我要查詢吐槽內容包含“流量”的所有文檔,代碼如下:

db.spit.find({content:/流量/})

如果要查詢吐槽內容中以“加班”開頭的,代碼如下:

db.spit.find({content:/^加班/})

大於 小於 不等於

<, <=, >, >= 這個操作符也是很常用的,格式如下:

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

示例:查詢吐槽瀏覽量大於1000的記錄

db.spit.find({visits:{$gt:1000}})

包含與不包含

包含使用$in操作符。

示例:查詢吐槽集合中userid字段包含1013和1014的文檔

db.spit.find({userid:{$in:["1013","1014"]}})

不包含使用$nin操作符。

示例:查詢吐槽集合中userid字段不包含1013和1014的文檔

db.spit.find({userid:{$nin:["1013","1014"]}})

條件連接

我們如果需要查詢同時滿足兩個以上條件,需要使用$and操作符將條件進行關聯。(相
當於SQL的and)

格式爲:

$and:[ {  },{  },{ } ]

示例:查詢吐槽集合中visits大於等於1000 並且小於2000的文檔

db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})

如果兩個以上條件之間是或者的關係,我們使用 操作符進行關聯,與前面 and的使用
方式相同

格式爲:

$or:[ {  },{  },{   } ]

示例:查詢吐槽集合中userid爲1013,或者瀏覽量小於2000的文檔記錄

db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})

列值增長

如果我們想實現對某列值在原有值的基礎上進行增加或減少,可以使用$inc運算符來實現

db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )

聚合查詢(多表聯查)

如果我們想進行兩表聯查可以使用如下語法

db.student.aggregate([
   {
     $lookup:
       {
         from: "從表名",
         localField: "主表的關聯字段",
         foreignField: "從表的關聯字段",
         as: "給查詢結果起名"
       }
  }
])

示例:student學生表中有gradeId字段與grade年級表中的_id關聯給查詢的結果起名爲studentAndGrade

db.student.aggregate([
   {
     $lookup:
       {
         from: "grade",
         localField: "gradeId",
         foreignField: "_id",
         as: "studentAndGrade"
       }
  }
])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章