MongoDB中,一個數據庫包含多個集合(相似關係型數據庫的表),一個集合包含多個文檔(相似關係型數據庫的一行記錄),文檔存儲方式是類JSON的BSON存儲數據,BSON能夠理解爲在JSON格式上添加了一些JSON沒有的數據類型。正則表達式
文檔:sql
兩個文檔之間有 嵌入式關係 和 引用式關係數據庫
集合:json
集合就是各類文檔的集合,MongoDB的同一個集合能夠存儲不一樣結構的多個文檔,例如:數組
{"company":"Chenshi keji"} {"people":"man","name":"peter"}
數據庫的信息存儲在集合中,他們統一使用系統的命名空間:DBNAME.system.* DBNAME 可用 db 或數據庫名替代服務器
數據庫操做:數據結構
集合的操做:app
db.createCollection("users") //無參
db.createCollection("shiyanlou2", { capped : 1, autoIndexID : 1, size : 6142800, max : 10000 } )
參數描述:函數
show collections
db.users.drop
文檔的操做:post
insert() db.users.insert([ ... { name : "jam", ... email : "jam@qq.com"... }, ... { name : "tom", ... email : "tom@qq.com"... } ... ]) save() db.users.save([ ... { name : "jam", ... email : "jam@qq.com"... }, ... { name : "tom", ... email : "tom@qq.com"... } ... ])
查詢整個集合
db.users.find() db.users.find().pretty() //更美觀的顯示方式
and查詢
db.users.find({ key1: value1, key2: value2 }).pretty()
or查詢
db.users.find( { $or: [ {key1: value1}, {key2: value2} ] } ).pretty()
同時使用and和or
db.post.find({ "number": {$gt:10}, $or: [ {"by": "shiyanlou"}, {"title": "MongoDB Overview"} ] }).pretty()
{$gt:10} 表示大於10,另外,$lt 表示小於,$lte 表示小於等於,$gte 表示大於等於,$ne 表示不等於
db.shiyanlou.update({"user_id":2,"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}})
db.shiyanlou.save({"_id":ObjectId("53ea174ccb4c62646d9544f4"),"name":"Bob","position":"techer"})
_id 對應的是要替換文檔的 _id
db.shiyanlou.remove({"name":"Bob"})
db.shiyanlou.find({"name":{$type:2}})
查找name是字符串的文檔記錄。
db.shiyanlou.find().limit(1) //讀取一條記錄,默認是排在最前面的那條被讀取 db.shiyanlou.find().limit(1).skip(1) //讀取時跳過指定數量的記錄
db.COLLECTION_NAME.find().sort({KEY:1|-1}) //升序1 降序-1
例如:
db.shiyanlou.find().sort({"time":1}
索引是特殊的數據結構,存儲在容易遍歷讀取的數據集合裏,是對數據庫集合中的一個或者多個文檔的值進行排序的一種結構。
db.COLLECTION_NAME.ensureIndex({KEY:1|-1}) //升序1 降序-1
例如:
db.shiyanlou.ensureIndex({"name":1})
explain()顯示查詢的詳細元數據
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
結果中字段解釋: