什麼是MongoDB
MongoDB是一個基於分佈式文件存儲的數據庫,它是非關係型數據庫。
它支持BSON格式。所謂的BSON格式就是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,是JSON的拓展。
什麼時候用MongoDB
- 當數據量大
- 數據價值低
MongoDB體系結構’
Mongodb的邏輯結構是一種層次結構,有數據庫(database)、集合(collection)、文檔(document)這三部分組成。
MongoDB | MySql |
---|---|
database數據庫 | database 數據庫 |
collection集合 | table 表 |
文檔(document) | row 一行數據 |
- MongoDB 的文檔(document),相當於關係數據庫中的一行記錄。
- 多個文檔組成一個集合collection 相當於 table 表
常用命令
選擇和創建數據庫
語法格式:
use 數據庫名稱
數據庫名如果不存在,就會創建數據庫。
例子:
> use spitdb
switched to db spitdb
插入文檔
語法格式
db.集合名稱.insert(數據);
例子:
db.spit.insert({content:"插入測試",userid:"1",nickname:"小愛同學",visits:NumberInt(1000)})
查詢文檔
查詢集合的語法格式:
db.集合名稱.find()
例子
db.spit.find()
結果
{ "_id" : ObjectId("5e5d27b06b17c4e54a622c68"), "content" : "插入測試", "userid" : "1", "nickname" : "小愛同學", "visits" : 1000 }
{ "_id" : "1", "content" : "我還是沒有想明白到底爲啥出 錯", "userid" : "1012", "nickname" : "小明", "visits" : 2020 }
{ "_id" : "2", "content" : "加班到半夜", "userid" : "1013", "nickname" : "凱 撒", "visits" : 1023 }
{ "_id" : "3", "content" : "手機流量超了咋 辦?", "userid" : "1013", "nickname" : "凱撒", "visits" : 111 }
{ "_id" : "4", "content" : "堅持就是勝利", "userid" : "1014", "nickname" : "諾 諾", "visits" : 1223 }
如果想要條件查詢,那麼把條件放json裏
db.集合名稱.find({"field":條件})
例子:
db.spit.find({"userid":"1013"})
結果
{ "_id" : "2", "content" : "加班到半夜", "userid" : "1013", "nickname" : "凱 撒", "visits" : 1023 }
{ "_id" : "3", "content" : "手機流量超了咋 辦?", "userid" : "1013", "nickname" : "凱撒", "visits" : 111 }
那如果只想要查詢到的第一條怎麼辦?
db.集合名稱.findOne()
例子
db.spit.findOne({"userid":"1013"})
結果
{
"_id" : "2",
"content" : "加班到半夜",
"userid" : "1013",
"nickname" : "凱 撒",
"visits" : 1023
}
如果你想返回指定條數的記錄,可以在find方法後調用limit來返回結果
db.集合名.find().limit(返回指定條數)
例子
db.spit.find().limit(3)
結果
{ "_id" : ObjectId("5e5d27b06b17c4e54a622c68"), "content" : "插入測試", "userid" : "1", "nickname" : "小愛同學", "visits" : 1000 }
{ "_id" : "1", "content" : "我還是沒有想明白到底爲啥出 錯", "userid" : "1012", "nickname" : "小明", "visits" : 2020 }
{ "_id" : "2", "content" : "加班到半夜", "userid" : "1013", "nickname" : "凱 撒", "visits" : 1023 }
修改文檔
db.集合名稱.update(條件,修改後的數據)
例子
原數據:{ "_id" : "2", "content" : "加班到半夜", "userid" : "1013", "nickname" : "凱 撒", "visits" : 1023 }
db.spit.update({"_id":"2"},{"content":"修改文檔"}))
結果:修改後的數據 { "_id" : "2", "content" : "修改文檔" }
我們會發現其他字段都沒了,那麼只想改變指定字段數據呢
db.集合名稱.update(條件,{$set:修改後的數據)
例子
原數據:{ "_id" : "1", "content" : "我還是沒有想明白到底爲啥出 錯", "userid" : "1012", "nickname" : "小明", "visits" : 2020 }
我們把nickname:小明->小愛
db.spit.update({"_id":"1"},{$set:{"nickname":"小愛"}})
修改後數據:
{ "_id" : "1", "content" : "我還是沒有想明白到底爲啥出 錯", "userid" : "1012", "nickname" : "小愛", "visits" : 2020 }
刪除文檔
db.集合名稱.remove(條件)
db.spit.remove({}):全部刪除
統計條數
db.集合名稱.count(條件)
模糊查詢
MongoDB的模糊查詢是通過正則表達式的方式實現的。格式爲:
/模糊查詢字符串/
例子
db.spit.find({"nickname":/小愛/})
查詢結果:
{ "_id" : ObjectId("5e5d27b06b17c4e54a622c68"), "content" : "插入測試", "userid" : "1", "nickname" : "小愛同學", "visits" : 1000 }
{ "_id" : "1", "content" : "我還是沒有想明白到底爲啥出 錯", "userid" : "1012", "nickname" : "小愛", "visits" : 2020 }
大於 小於 不等於
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
包含與不包含
包含使用$in操作符。
db.spit.find({userid:{$in:["1013","1014"]}})
不包含使用$nin操作符。
db.spit.find({userid:{$nin:["1013","1014"]}})
條件連接
格式
$and:[ { },{ },{ } ]
例子
查詢集合中visits大於等於1000 並且小於2000的文檔
db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})
or則 同and
$or:[ { },{ },{ } ]
例子
db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})
列值增長
$inc運算符來實現自增
db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )