MongoDB由C++語言編寫,運行穩(wěn)定,性能高
MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。
MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。(實為Bson形式)
特點:
模式自由 :可以把不同結(jié)構(gòu)的文檔存儲在同一個數(shù)據(jù)庫里
面向集合的存儲:適合存儲 JSON風(fēng)格文件的形式
完整的索引支持:對任何屬性可索引
MongoDB文檔類似于JSON對象,字段值可以包含其他文檔、數(shù)組、文檔數(shù)組
MongoDB中的三要素:
數(shù)據(jù)庫是一個集合的物理容器
集合就是關(guān)系數(shù)據(jù)庫中的表
文檔對應(yīng)著關(guān)系數(shù)據(jù)庫中的行
數(shù)據(jù)庫的限制
? ? ? 1.不能是空字符串("")。
? ? ? 2.不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
? ? ? 3.應(yīng)全部小寫。
? ? ? 4.最多64字節(jié)
集合的限制
????????1.集合名不能是空字符串""。
? ? ? 2.集合名不能含有\(zhòng)0字符(空字符),這個字符表示集合名的結(jié)尾。
? ? ? 3.集合名不能以"system."開頭,這是為系統(tǒng)集合保留的前綴。
? ? ? 4.用戶創(chuàng)建的集合名字不能含有保留字符。
文檔的限制
????????1.文檔中的鍵/值對是有序的。
? ? ? ? 2.文檔中的值不僅可以是在雙引號里
? ? ? ? 面的字符串,還可以是其他幾種數(shù)據(jù)類
? ? ? ? 型
? ?????? 3.MongoDB區(qū)分類型和大小寫。
? ? ? ? 4.MongoDB的文檔不能有重復(fù)的鍵。
? ? ? ? 5.文檔的鍵是字符串。
????????????鍵的命名規(guī)范
????????????1.鍵不能含有\(zhòng)0 (空字符)。這個字符用來表示鍵的結(jié)尾。
? ? ? ????? 2. .和$有特別的意義,只有在特定環(huán)境下才能使用。
基礎(chǔ)命令
啟動
service mongod start
低版本啟動
service mongod start
停止
service mongod stop
重置
service mongod restart
啟動mongodb客戶端
mongo
查看當(dāng)前數(shù)據(jù)庫
db
查看所有數(shù)據(jù)庫
show dbs
切換數(shù)據(jù)庫 (創(chuàng)建數(shù)據(jù)庫)
use dbname
查看數(shù)據(jù)庫的狀態(tài)信息
db.stats()
詳細(xì)信息每一項的含義
db:當(dāng)前數(shù)據(jù)庫的名字。
? ? collections:當(dāng)前數(shù)據(jù)庫的集合數(shù)。
? ? objects:當(dāng)前數(shù)據(jù)庫所有集合總所包含的對象(即文檔)的數(shù)量。
? ? avgObjSize:每個文檔的平均大小(以字節(jié)為單位)。
? ? dataSize:此數(shù)據(jù)庫中保存的未壓縮數(shù)據(jù)的總大小,不是指占有磁盤大小,單位是bytes。
? ? storageSize:分配給此數(shù)據(jù)庫的集合用于存儲文檔的空間總量,也就是當(dāng)前數(shù)據(jù)庫占有磁盤大小,單位是bytes。
? ? numExtents:當(dāng)前數(shù)據(jù)庫所有集合包含的擴展數(shù)量的統(tǒng)計。
? ? indexes:數(shù)據(jù)庫中包含的所有集合的索引總數(shù),也就是system.indexes表數(shù)據(jù)行數(shù)。
? ? indexSize:此數(shù)據(jù)庫上創(chuàng)建的所有索引的總大小,單位是bytes。
數(shù)據(jù)庫刪除:刪除當(dāng)前指向的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在,則什么也不做
查看數(shù)據(jù)庫下的所有集合
show collection
刪除數(shù)據(jù)庫(刪除當(dāng)前所在的數(shù)據(jù)庫)
db.dropDatabase()
創(chuàng)建集合和
db.createCollection('dbname') (非固定大小)
db.createCollection('dbname',{'capped':true,'size','1000','max':'10'}) (固定大小)
創(chuàng)建的集合的字段的選項
字段? ? ? ? ? ? ? ? 類型? ? ? ? ? ? ?描述? ? ? ? ??
capped? ? ? ? ?布爾? ? ? ? ? ? ? ??如果為 true,則創(chuàng)建固定集合。固定集合是指有著固定大小的集合,當(dāng)達到最大值時,它會自動覆蓋最早的文檔。 當(dāng) 該值為 true 時,必須指定 size 參數(shù)。
autolndexld? ? ? 布爾? ? ? ? ? ? ??如為 true,自動在 _id 字段創(chuàng)建索引。默認(rèn)為 false。
size? ? ? ? ? ? ? ? 數(shù)值? ? ? ? ? ? ?為固定集合指定一個最大值.當(dāng)文檔達到上限時,會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)。如果 capped 為 true,也需要指定該字段。
max? ? ? ? ? ? ? ?數(shù)值? ? ? ? ? ? ? ? ??指定固定集合中包含文檔的最大數(shù)量。
插入數(shù)據(jù)
db.collectionname.insert({document})
查找數(shù)據(jù)
db.students.find({})
db.students.find()
將數(shù)據(jù)以格式化的方式展示pretty()
db.集合名稱.find().pretty()
關(guān)于ObjectId
ObjectId 類似唯一主鍵,可以很快的去生成和排序
每個文檔都有一個屬性,為_id,保證每個文檔的唯一性
可以自己去設(shè)置_id插入文檔
如果沒有提供,那么MongoDB為每個文檔提供了一個獨特的_id,類型為objectID
objectID是一個12字節(jié)的十六進制數(shù)
? ? 前4個字節(jié)為當(dāng)前時間戳
? ? 接下來3個字節(jié)的機器ID
? ? 接下來的2個字節(jié)中MongoDB的服務(wù)進程id
? ? 最后3個字節(jié)是簡單的增量值