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
>