以吐槽表爲例講解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"
}
}
])