目錄
1 啓動MongoDB服務
MongoDB 目錄的 bin 目錄中執行 mongod.exe 文件
進入MongoDB\bin目錄下:
mongod --dbpath D:\Program Files\mongodb\data\db (D:\Program Files\mongodb\爲mongoDB安裝路徑)
或者(初始化服務的情況)
啓動MongoDB服務
net start MongoDB
關閉MongoDB服務
net stop MongoDB
2 進入mongoDb
運行 bin目錄下mongo.exe
D:\Program Files\mongodb\bin\mongo.exe
3 數據庫
3.1 show dbs 命令可以顯示所有數據的列表
> show dbs
local 0.078GB
test 0.078GB
說明:
admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
local: 這個數據永遠不會被複制,可以用來存儲限於本地單臺服務器的任意集合
config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息
3.2 db 命令用於查看當前操作的文檔(數據庫)
> db
test
>
3.3 創建或切換庫
數據庫不存在則創建,存在則切換。需要有數據,show dbs纔會顯示。
命令:use <數據庫>
例:
> use myLocal
switched to db myLocal
>
3.4 數據庫插入數據
db.<數據庫>.insert({"name":"1111"});該處會自動創建集合。
例:
> db.myLocalhost.insert({"name":"1111"})
WriteResult({ "nInserted" : 1 })
3.5 刪除當前數據庫
db.dropDatabase() { "dropped" : "runoob", "ok" : 1 }
4 集合
4.1 創建集合
語法格式:
db.createCollection(name, options)
參數說明:
name: 要創建的集合名稱
options: 可選參數, 指定有關內存大小及索引的選項
例:在 test 數據庫中創建 runoob 集合,需要先切換到test數據庫。
> use test
switched to db test
> db.createCollection("runoob")
{ "ok" : 1 }
或者:
> db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
{ "ok" : 1 }
>
4.2 查看已有集合
show collections 或者 show tables
> show collections
runoob
system.indexes
4.3 刪除集合
db.<集合>.drop()
例:刪除集合runoob
>db.runoob.drop()
true
5 文檔
5.1 插入文檔
db.<集合>.insert(document);集合不存在時會自動創建。
例:向col集合插入一個文檔。
> db.col.insert({"title":"MongoDB","url":"路徑"})))
WriteResult({ "nInserted" : 1 })
我們也可以將數據定義爲一個變量,如下所示:
1.建文檔document
> document=({title: 'MongoDB 教程',
description: 'MongoDB 是一個 Nosql 數據庫',
by: '菜鳥教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
2.文檔document保存到集合col
db.col.insert(document) 或者 db.col.save(document)
5.2 查看集合裏面的文檔
db.<集合>.find()
例:col集合裏面插入的兩個文檔。
> db.col.find()
{ "_id" : ObjectId("5ccfa7aba9e235c3e4d8e739"), "title" : "MongoDB" }
{ "_id" : ObjectId("5ccfa7e3a9e235c3e4d8e73a"), "title" : "MongoDB", "url" : "路徑" }
5.3 更新集合
5.3.1 update()
update() 方法用於更新已存在的文檔。語法格式如下:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
參數說明:
query : update的查詢條件,類似sql update查詢內where後面的。
update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解爲sql update查詢內set後面的
upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數爲true,就把按條件查出來多條記錄全部更新。
writeConcern :可選,拋出異常的級別。
例:
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
5.3.2 save() 方法
save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
參數說明:
document : 文檔數據。
writeConcern :可選,拋出異常的級別。
例:將id爲5ccfa7aba9e235c3e4d8e739的文檔更換如下。
>db.col.save({
"_id" : ObjectId("5ccfa7aba9e235c3e4d8e739"),
"title1" : "MongoDB111"
})
5.3.3 刪除文檔:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
參數說明:
query :(可選)刪除的文檔的條件。
justOne : (可選)如果設爲 true 或 1,則只刪除一個文檔,如果不設置該參數,或使用默認值 false,則刪除所有匹配條件的文檔。
writeConcern :(可選)拋出異常的級別。
例:
>db.col.remove({'title':'MongoDB 教程'})
>
5.4 查詢文檔
db.collection.find(query, projection)
query :可選,使用查詢操作符指定查詢條件
projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。
除了 find() 方法之外,還有一個 findOne() 方法,它只返回一個文檔。 如果你需要以易讀的方式來讀取數據,可以使用 pretty() 方法,語法格式如下:
>db.col.find().pretty()
5.4.1條件語句查詢
操作 格式 範例 RDBMS中的類似語句
等於 {<key>:<value>} db.col.find({"by":"菜鳥教程"}).pretty() where by = '菜鳥教程'
小於 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小於或等於 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大於 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大於或等於 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等於 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
5.4.2AND
>db.col.find({key1:value1, key2:value2}).pretty()
5.4.3 OR
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例:
db.col.find({$or:[{"by":"菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()
6 $type 匹配
例:匹配title是string類型數據(String對應MongoDB類型中的2)
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
7 limit與skip
從NUMBER2+1開始,顯示NUMBER1條,顯示。默認skip爲0;
db.COLLECTION_NAME.find().limit(NUMBER1).skip(NUMBER2)
例:指定返回title字段,
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
8 排序
其中 1 爲升序排列,而 -1 是用於降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
例:likes降序
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
9 索引
9.1 創建索引
keys爲數據字段,1 爲指定按升序創建索引,如果你想按降序來創建索引指定爲 -1。options爲參數。
db.collection.createIndex(keys, options)
例:
db.col.createIndex({"title":1,"description":-1})
9.2 查看集合索引
db.col.getIndexes()
9.3 查看集合索引大小
db.col.totalIndexSize()
9.4 刪除集合所有索引
db.col.dropIndexes()
9.5 刪除集合指定索引
db.col.dropIndex("索引名稱")
10 聚合
10.1 aggregate()
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
聚合的表達式
$sum 計算總和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 計算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 獲取集合中所有文檔對應值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 獲取集合中所有文檔對應值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在結果文檔中插入值到一個數組中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在結果文檔中插入值到一個數組中,但不創建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據資源文檔的排序獲取第一個文檔數據。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據資源文檔的排序獲取最後一個文檔數據 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
10.2 管道
參考:
https://www.runoob.com/mongodb/mongodb-intro.html