MongoDB :第三章:MongoDB的數(shù)據(jù)類(lèi)型與創(chuàng)建MongoDB數(shù)據(jù)庫(kù)
元數(shù)據(jù)
數(shù)據(jù)庫(kù)的信息是存儲(chǔ)在集合中。它們使用了系統(tǒng)的命名空間:
dbname.system.*
在MongoDB數(shù)據(jù)庫(kù)中名字空間 <dbname>.system.* 是包含多種系統(tǒng)信息的特殊集合(Collection),如下:
對(duì)于修改系統(tǒng)集合中的對(duì)象有如下限制。
在{{system.indexes}}插入數(shù)據(jù),可以創(chuàng)建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動(dòng)更新相關(guān)信息)。
{{system.users}}是可修改的。 {{system.profile}}是可刪除的。
MongoDB 數(shù)據(jù)類(lèi)型
下表為MongoDB中常用的幾種數(shù)據(jù)類(lèi)型。
下面說(shuō)明下幾種重要的數(shù)據(jù)類(lèi)型。
ObjectId
ObjectId 類(lèi)似唯一主鍵,可以很快的去生成和排序,包含 12 bytes,含義是:
前 4 個(gè)字節(jié)表示創(chuàng)建 unix 時(shí)間戳,格林尼治時(shí)間 UTC 時(shí)間,比北京時(shí)間晚了 8 個(gè)小時(shí)
接下來(lái)的 3 個(gè)字節(jié)是機(jī)器標(biāo)識(shí)碼
緊接的兩個(gè)字節(jié)由進(jìn)程 id 組成 PID
最后三個(gè)字節(jié)是隨機(jī)數(shù)
MongoDB 中存儲(chǔ)的文檔必須有一個(gè) _id 鍵。這個(gè)鍵的值可以是任何類(lèi)型的,默認(rèn)是個(gè) ObjectId 對(duì)象
由于 ObjectId 中保存了創(chuàng)建的時(shí)間戳,所以你不需要為你的文檔保存時(shí)間戳字段,你可以通過(guò) getTimestamp 函數(shù)來(lái)獲取文檔的創(chuàng)建時(shí)間:
> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2017-11-25T07:21:10Z")
ObjectId 轉(zhuǎn)為字符串
> newObject.str
5a1919e63df83ce79df8b38f
字符串
BSON 字符串都是 UTF-8 編碼。
時(shí)間戳
BSON 有一個(gè)特殊的時(shí)間戳類(lèi)型用于 MongoDB 內(nèi)部使用,與普通的 日期 類(lèi)型不相關(guān)。 時(shí)間戳值是一個(gè) 64 位的值。其中:
前32位是一個(gè) time_t 值(與Unix新紀(jì)元相差的秒數(shù))
后32位是在某秒中操作的一個(gè)遞增的序數(shù)
在單個(gè) mongod 實(shí)例中,時(shí)間戳值通常是唯一的。
在復(fù)制集中, oplog 有一個(gè) ts 字段。這個(gè)字段中的值使用BSON時(shí)間戳表示了操作時(shí)間。
BSON 時(shí)間戳類(lèi)型主要用于 MongoDB 內(nèi)部使用。在大多數(shù)情況下的應(yīng)用開(kāi)發(fā)中,你可以使用 BSON 日期類(lèi)型。
日期
表示當(dāng)前距離 Unix新紀(jì)元(1970年1月1日)的毫秒數(shù)。日期類(lèi)型是有符號(hào)的, 負(fù)數(shù)表示 1970 年之前的日期。
> var mydate1 = new Date() //格林尼治時(shí)間
> mydate1
ISODate("2018-03-04T14:58:51.233Z")
> typeof mydate1
object
> var mydate2 = ISODate() //格林尼治時(shí)間
> mydate2
ISODate("2018-03-04T15:00:45.479Z")
> typeof mydate2
object
這樣創(chuàng)建的時(shí)間是日期類(lèi)型,可以使用 JS 中的 Date 類(lèi)型的方法。
返回一個(gè)時(shí)間類(lèi)型的字符串:
> var mydate1str = mydate1.toString()
> mydate1str
Sun Mar 04 2018 14:58:51 GMT+0000 (UTC)
> typeof mydate1str
string
或者
> Date()
Sun Mar 04 2018 15:02:59 GMT+0000 (UTC)
MongoDB 創(chuàng)建數(shù)據(jù)庫(kù)
語(yǔ)法
MongoDB 創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:
use DATABASE_NAME
如果數(shù)據(jù)庫(kù)不存在,則創(chuàng)建數(shù)據(jù)庫(kù),否則切換到指定數(shù)據(jù)庫(kù)。
實(shí)例
以下實(shí)例我們創(chuàng)建了數(shù)據(jù)庫(kù) runoob:
> use runoob
switched to db runoob
> db
runoob
>
如果你想查看所有數(shù)據(jù)庫(kù),可以使用 show dbs 命令:
> show dbs
admin 0.000GB
local 0.000GB
>
可以看到,我們剛創(chuàng)建的數(shù)據(jù)庫(kù) runoob 并不在數(shù)據(jù)庫(kù)的列表中, 要顯示它,我們需要向 runoob 數(shù)據(jù)庫(kù)插入一些數(shù)據(jù)。
> db.runoob.insert({"name":"菜鳥(niǎo)教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
local 0.078GB
runoob 0.078GB
test 0.078GB
>
MongoDB 中默認(rèn)的數(shù)據(jù)庫(kù)為 test,如果你沒(méi)有創(chuàng)建新的數(shù)據(jù)庫(kù),集合將存放在 test 數(shù)據(jù)庫(kù)中。
注意: 在 MongoDB 中,集合只有在內(nèi)容插入后才會(huì)創(chuàng)建! 就是說(shuō),創(chuàng)建集合(數(shù)據(jù)表)后要再插入一個(gè)文檔(記錄),集合才會(huì)真正創(chuàng)建。
MongoDB 刪除數(shù)據(jù)庫(kù)
語(yǔ)法
MongoDB 刪除數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:
db.dropDatabase()
刪除當(dāng)前數(shù)據(jù)庫(kù),默認(rèn)為 test,你可以使用 db 命令查看當(dāng)前數(shù)據(jù)庫(kù)名。
實(shí)例
以下實(shí)例我們刪除了數(shù)據(jù)庫(kù) runoob。
首先,查看所有數(shù)據(jù)庫(kù):
> show dbs
local 0.078GB
runoob 0.078GB
test 0.078GB
接下來(lái)我們切換到數(shù)據(jù)庫(kù) runoob:
> use runoob
switched to db runoob
>
執(zhí)行刪除命令:
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }
最后,我們?cè)偻ㄟ^(guò) show dbs 命令數(shù)據(jù)庫(kù)是否刪除成功:
> show dbs
local 0.078GB
test 0.078GB
>
刪除集合
集合刪除語(yǔ)法格式如下:
db.collection.drop()
以下實(shí)例刪除了 runoob 數(shù)據(jù)庫(kù)中的集合 site:
> use runoob
switched to db runoob
> show tables
site
> db.site.drop()
true
> show tables
>