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
    >