MongoDB :第三章:MongoDB的數(shù)據(jù)類型與創(chuàng)建MongoDB數(shù)據(jù)庫

元數(shù)據(jù)

數(shù)據(jù)庫的信息是存儲在集合中。它們使用了系統(tǒng)的命名空間:

dbname.system.*

在MongoDB數(shù)據(jù)庫中名字空間 <dbname>.system.* 是包含多種系統(tǒng)信息的特殊集合(Collection),如下:
 

 

對于修改系統(tǒng)集合中的對象有如下限制。

在{{system.indexes}}插入數(shù)據(jù),可以創(chuàng)建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關(guān)信息)。

{{system.users}}是可修改的。 {{system.profile}}是可刪除的。
MongoDB 數(shù)據(jù)類型

下表為MongoDB中常用的幾種數(shù)據(jù)類型。
 

 

 

下面說明下幾種重要的數(shù)據(jù)類型。
ObjectId

ObjectId 類似唯一主鍵,可以很快的去生成和排序,包含 12 bytes,含義是:

    前 4 個字節(jié)表示創(chuàng)建 unix 時間戳,格林尼治時間 UTC 時間,比北京時間晚了 8 個小時
    接下來的 3 個字節(jié)是機(jī)器標(biāo)識碼
    緊接的兩個字節(jié)由進(jìn)程 id 組成 PID
    最后三個字節(jié)是隨機(jī)數(shù)

MongoDB 中存儲的文檔必須有一個 _id 鍵。這個鍵的值可以是任何類型的,默認(rèn)是個 ObjectId 對象

由于 ObjectId 中保存了創(chuàng)建的時間戳,所以你不需要為你的文檔保存時間戳字段,你可以通過 getTimestamp 函數(shù)來獲取文檔的創(chuàng)建時間:

    > var newObject = ObjectId()
    > newObject.getTimestamp()
    ISODate("2017-11-25T07:21:10Z")

ObjectId 轉(zhuǎn)為字符串

    > newObject.str
    5a1919e63df83ce79df8b38f

字符串

BSON 字符串都是 UTF-8 編碼。
時間戳

BSON 有一個特殊的時間戳類型用于 MongoDB 內(nèi)部使用,與普通的 日期 類型不相關(guān)。 時間戳值是一個 64 位的值。其中:

    前32位是一個 time_t 值(與Unix新紀(jì)元相差的秒數(shù))
    后32位是在某秒中操作的一個遞增的序數(shù)

在單個 mongod 實(shí)例中,時間戳值通常是唯一的。

在復(fù)制集中, oplog 有一個 ts 字段。這個字段中的值使用BSON時間戳表示了操作時間。

    BSON 時間戳類型主要用于 MongoDB 內(nèi)部使用。在大多數(shù)情況下的應(yīng)用開發(fā)中,你可以使用 BSON 日期類型。

日期

表示當(dāng)前距離 Unix新紀(jì)元(1970年1月1日)的毫秒數(shù)。日期類型是有符號的, 負(fù)數(shù)表示 1970 年之前的日期。

    > var mydate1 = new Date()     //格林尼治時間
    > mydate1
    ISODate("2018-03-04T14:58:51.233Z")
    > typeof mydate1
    object

    > var mydate2 = ISODate() //格林尼治時間
    > mydate2
    ISODate("2018-03-04T15:00:45.479Z")
    > typeof mydate2
    object

這樣創(chuàng)建的時間是日期類型,可以使用 JS 中的 Date 類型的方法。

返回一個時間類型的字符串:

    > 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ù)庫
語法

MongoDB 創(chuàng)建數(shù)據(jù)庫的語法格式如下:

use DATABASE_NAME

如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫。
實(shí)例

以下實(shí)例我們創(chuàng)建了數(shù)據(jù)庫 runoob:

    > use runoob
    switched to db runoob
    > db
    runoob
    >

如果你想查看所有數(shù)據(jù)庫,可以使用 show dbs 命令:

    > show dbs
    admin   0.000GB
    local   0.000GB
    >

可以看到,我們剛創(chuàng)建的數(shù)據(jù)庫 runoob 并不在數(shù)據(jù)庫的列表中, 要顯示它,我們需要向 runoob 數(shù)據(jù)庫插入一些數(shù)據(jù)。

    > db.runoob.insert({"name":"菜鳥教程"})
    WriteResult({ "nInserted" : 1 })
    > show dbs
    local   0.078GB
    runoob  0.078GB
    test    0.078GB
    >

MongoDB 中默認(rèn)的數(shù)據(jù)庫為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫,集合將存放在 test 數(shù)據(jù)庫中。

    注意: 在 MongoDB 中,集合只有在內(nèi)容插入后才會創(chuàng)建! 就是說,創(chuàng)建集合(數(shù)據(jù)表)后要再插入一個文檔(記錄),集合才會真正創(chuàng)建。

MongoDB 刪除數(shù)據(jù)庫
語法

MongoDB 刪除數(shù)據(jù)庫的語法格式如下:

db.dropDatabase()

刪除當(dāng)前數(shù)據(jù)庫,默認(rèn)為 test,你可以使用 db 命令查看當(dāng)前數(shù)據(jù)庫名。
實(shí)例

以下實(shí)例我們刪除了數(shù)據(jù)庫 runoob。

首先,查看所有數(shù)據(jù)庫:

    > show dbs
    local   0.078GB
    runoob  0.078GB
    test    0.078GB

接下來我們切換到數(shù)據(jù)庫 runoob:

    > use runoob
    switched to db runoob
    >

執(zhí)行刪除命令:

    > db.dropDatabase()
    { "dropped" : "runoob", "ok" : 1 }

最后,我們再通過 show dbs 命令數(shù)據(jù)庫是否刪除成功:

    > show dbs
    local  0.078GB
    test   0.078GB
    >

刪除集合

集合刪除語法格式如下:

db.collection.drop()

以下實(shí)例刪除了 runoob 數(shù)據(jù)庫中的集合 site:

    > use runoob
    switched to db runoob
    > show tables
    site
    > db.site.drop()
    true
    > show tables
    >