一 ? 安裝
1.下載
$ brew install mongodb
2.啟動
?$ mongod --config /usr/local/etc/mongod.conf
3.連接
?$ mongo ?
二 ? 語法
show dbs ?查看所有數據庫
db.createCollection('col') 創建col集合
use DBNAME ?創建并切換至某某數據庫
db.dropDatabase() ?刪除當前數據庫
db.collection.drop() ? 刪除集合
show ?tables ? 查看所有集合
db.Collection_Name.insert(document) ?插入文檔
db.Collection_Name.find() ? 查看文檔
db.Collection_Name.update(<query>,<update>,{upsert:false ? 是否插入不存在的數據,multi:false ?只更新查到的第一個數據 ? ?writeConcern:拋出異常的級別}
db.collection.save(<document>,{writeConcern:級別} ?save() 方法通過傳入的文檔來替換已有的文檔
db.collection.remove(<query>,{justOne:true ? 只刪除一個文檔}
db.collection.find().pretty() ?查詢集合中的數據
db.col.find({"likes":{$lt:50}}).pretty() ? 小于
db.col.find({"likes":{$lte:50}}).pretty() ? 小于等于
db.col.find({"likes":{$gt:50}}).pretty() ? 大于
db.col.find({"like":{$gte:50}}}.pretty() ? 大于等于
db.col.find({"likes":{$ne:50}}).pretty() ? 不等于
AND條件? db.col.find({key1:value1,key2:value2}).pretty()
OR條件 ? db.col.find({$or:[{key1:value1}, {key2:value2}]}).pretty()
AND? OR 組合? db.col.find({"likes":{$gt:50},$or:[{"by":"菜鳥教程"},{"title":"MongoDB 教程"}]}).pretty()
db.col.find({"title":{$type:2}}) ? $type條件操作符 Double ?1; String 2; Object 3;Array 4;Binary data 5; Undefined 6;Object id 7; Boolean 8; Date 9;Null 10; Regular Expression 11; Javascript 13; Symbol 14; Timestamp 17;
db.collection.find().limit(NUMBER) ?讀取指定數量的數據記錄
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)? 跳過指定的條數,最先執行順序 sort再skip再limit
db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) ?1正序;-1倒序
索引 ?ensureIndex()
db.COLLECTION_NAME.ensureIndex({KEY:1},option) ?1為升序創建索引 ?-1為降序創建索引 ? ?option可選參數{background:false ?防止創建索引會阻塞其他數據庫操作,將其指定為true;.......}
db.col.ensureIndex({"title":1,"description":-1}) ?可以設置多個索引 ??
db.values.ensureIndex({open:1,close:1},{background:true})
聚合aggregate()方法用于處理數據,并返回計算后的結果
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
db.mycol.aggregate([{$group:{_id:"$by_user",num_tutorial:{$sum:"$likes"}}}])
$sum ?計算總和; $avg 計算平均值;$min 獲取集合中所有文檔對應的最小值; $max 最大值; $push 在結果文檔中插入值 到 一個數組中;$addToSet 在結果文檔中插入值到一個數組中,但不創建副本;$first ?根據資源文檔的排序獲取第一個文檔數據;$last ?最后一個文檔數據;
管道 將在一個管道處理完的結果 傳遞給下一個管道處理;表達式:處理輸入文檔并輸出。表達式是無狀態的,只能用于計算當前聚合管道的文檔:
$project 修改輸入文檔的結構;$match 用于過濾數據;$limit 限制聚合管道返回的文檔數;$skip ?跳過指定文檔的數量;$unwind 將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。$group:將集合中的文檔分組,可用于統計結果;$sort:排序;$geoNear:輸出接近某一地理位置的有序文檔。
分片:存在的另一種集群,可以滿足MongoDB數據量大量增長的需求。
備份:mongodump -h dbhost -d dbname -o dbdirectory
恢復數據:mongorestore -h <hostname><:port> -d ?dbname <path>
監控:/bin ? $mongostat
? ? ? ? ? ? ? ? ? ?$mongotop
關系類型:嵌入式關系--保存在單一的文檔中,比較容易獲取和維護數據,但不斷增大會影響讀寫性能。
? ? ? ? ? ? ? ? ? 引用式關系--把數據文檔和用戶文檔分開,通過文檔的ID字段來建立關系。{"name":"Tom Benzamin","address_ids":[ObjectId("52ffc4a5d85242602e000000"),ObjectId("52ffc4a5d85242602e000001")]}
使用DBRefs:一個文檔沖多個集合中引用文檔。{$ref:.集合名稱. ,$id: ..引用ID..,$db:.數據庫名稱..}
原子操作:MongoDB提供了許多原子操作,比如文檔的保存、修改、刪除。(原子操作:要么這個文檔保存到mongoDB,要么沒有保存到MongoDB,不會出現查詢到的文檔沒有保存完整的情況)
ObjectID 是一個12字節BSON類型數據,前4個字節表示時間戳,3個字節是機器標識碼,2個是進程ID,最后3個字節是隨機數
newObjectId = ObjectId()
new ObjectId().str
正則表達式post_text
db.posts.find({post_text:{$regex:"runoob"}})? 或db.posts.find({post_text:/runoob/}) 或 db.posts.find({post_text:{$regex:"runoob",$options:"$i"}})