最近新的項目中使用了MongoDB,所以也就花了點時間學習了一下。這篇文章給自己的學習做一個總結,打算日後把這篇文章當做API來使用,也分享給一些準備學習的小夥伴,希望能幫到你們。
date: 2018-04-25 20:49:12
MongoDB常用命令
最近新的項目中使用了MongoDB,所以也就花了點時間學習了一下。這篇文章給自己的學習做一個總結,順便日後把這篇文章當做API來使用,也分享給一些準備學習的小夥伴,希望能幫到你們。
基礎知識
資料庫集合操作
- use DATABASE_NAME
例:use mydb
將會跳轉到名為mydb的資料庫,如果該資料庫不存在,則建立該資料庫。
- db
查看當前選擇的資料庫
- show dbs
查看資料庫列表
- db.dropDatabase()
刪除當前資料庫
- db.collections.drop()
刪除當前集合
新增(Create)
- insert
db.COLLECTION_NAME.insert(document)
若不指定_id則會自動產生一個隨機唯一的id,插入多條記錄可以使用
db.COLLECTION_NAME.insert([doucument,document])
例:
db.col.insert({ title: 'MongoDB',by: 'bfsan',tags:['mongodb', 'database', 'NoSQL'],likes: 100})
此外還有inserOne()和inserMany(),使用這兩個方法可以返回插入文檔的id值,用法與insert一致。
更新(Update)
db.collection.update( <query>, <update>, { upsert: <boolean>,//true則對於不存在對應情況的記錄會新增,存在則會修改 multi: <boolean>,//true則會修改多條記錄 writeConcern: <document>//(可選)寫安全,用的不多,詳細內容請再查詢 })
例:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );//對count>15的所有記錄,count=count+1db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );//對查詢是否存在count>4的記錄,存在則為查到的第一條記錄(增加/修改)test5=OK,不存在則增加一條test5=OK的記錄
db.collection.save( <document>, {writeConcern: <document>})
save方法通過傳入文檔來替換已有文檔,如不指定id則為新增,自動分配id,如果指定_id,替換包含_id的記錄的全部資料。
刪除(Delete)
db.collection.remove( <query>,//當條件為空白時,則清空該collection { justOne: <boolean>, //true或1,則只刪除第一個文檔 writeConcern: <document> })
查詢(Retrieve)
db.collection.find(<query>, <projection>)//query條件,省略則查詢所有;projection投影出指定的列,省略則顯示所有列
查詢條件
功能 |
文法 |
等於 |
{key:value} |
小於 |
{key:{$lt:value}} |
小於或等於 |
{key:{$lte:value}} |
大於 |
{key:{$gt:value}} |
大於或等於 |
{key:{$gte:value}} |
不等於 |
{key:{$ne:value}} |
and |
{key1:value1, key2:value2} |
or |
{$or:[{key1: value1},{key2:value2}]} |
not |
{key:{$not:value}} |
in |
{key:{$in:array}} |
not in |
{key:{$nin:array}} |
all |
{key:{$all:array}} |
是否存在 |
{key:{$exists:true/false}} |
匹配某種資料類型的記錄 |
{key:{$type:type}} |
結果處理
.pretty() //格式化結果顯示,使結果格式自動縮排符合規範。.limit(n) //顯示前n條記錄.skip(n) //跳過前n條記錄.sort({key:1/-1}) //排序,1升序,-1降序
註:當查詢時同時使用sort,skip,limit,無論調用先後,執行順序總是sort-skip-limit。
串連查詢
- 借用變數進行中轉,必需使用findOne方法才能儲存進變數
var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
- $lookup指令
mongo提供的左外串連查詢,文法格式為
$lookup:{from,localField,foreignField,as}
需要使用彙總命令來操作,格式為
db.COLLECTION_NAME.aggreate({$lookup:{from,localField,foreignField,as}})
- from,所要關聯的集合名
- localField,本集合中的“外鍵”
- foreignField,所要關聯集合中的欄位
- as,輸出串連的文檔所到的欄位名
彙總
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)常用操作: {$project:{key:1/0}} 修改輸入文檔的結構。可以用來重新命名、增加或刪除欄位,也可以用於建立計算結果以及嵌套文檔。 {$match:{query}} 用於過濾資料,只輸出合格文檔。 {$limit:n} 用來限制返回的文檔數。 {$skip:n} 在跳過指定數量的文檔。 {$sort:{key:1/-1}} 將文檔排序後輸出。 $group 將集合中的文檔分組,可用於統計結果。