博客 / 詳情

返回

【趙渝強老師】MongoDB的數據類型

作為文檔型NoSQL數據庫的典型代表,MongoDB提供了豐富的數據類型,主要有:ObjectId、String、Boolean、Number、Arrays、Object、Null、Timestamp和Date。視頻講解如下:
https://www.bilibili.com/video/BV1XnmkBREcp/?aid=115720897697...

下面通過具體的示例來演示其中主要的數據類型以及它們的作用。

一、 ObjectId

ObjectId類似關係型數據庫中的主鍵,MongoDB使用它可以唯一確定集合中的一條文檔。ObjectId是一個BSON類型字符串,其中包含了時間戳、機器標識碼、進程ID和隨機數。因此在分佈式環境下,使用ObjectId可以避免MongoDB主鍵的衝突。當向MongoDB集合中插入文檔時,可以通過使用字段_id來指定ObjectId;如果沒有指定ObjectId,MongoDB會自動生成ObjectId。

下面通過一個簡單的示例來進行演示。
(1)使用mongoshell連接到MongoDB服務器端,並切換到scott數據庫中。

$ mongo
test@nosql11 1> use scott

(2)創建一張名叫test1的新集合,並向集合中插入一條文檔。

scott@nosql11 2> db.test1.insertOne({name:"Tom",age:25})

# 輸出的信息如下:
{
    "acknowledged" : true,
    "insertedId" : ObjectId("624a559df22c930516afc4e2")
}

(3)查詢集合test1中的數據。

scott@nosql11 3> db.test1.find()

# 輸出的信息如下:
{ "_id" : ObjectId("624a559df22c930516afc4e2"), "name" : "Tom", "age" : 25 }

# 由於在第(2)步插入文檔時沒有指定_id,MongoDB將會為插入的文檔自動生成一個ObjectId。

二、 日期類型

在MongoDB中表示日期和時間可以通過Date和Timestamp兩種不同的方式進行表示,MongoDB支持使用不同的方式來創建它們。下面通過具體的示例來進行演示。

(1)使用Date()插入一個字符串類型的時間數據。

scott@nosql11 5> Date()
Mon Apr 04 2025 10:37:19 GMT+0800 (CST)

(2)使用new Date()插入一個isodate類型的格林尼治標準時間數據。

scott@nosql11 6> new Date()
ISODate("2025-04-04T02:37:26.813Z")

(3)ISODate()與new Date()方式插入的時間數據類似。

scott@nosql11 7> ISODate()
ISODate("2025-04-04T02:37:35.642Z")

三、 數值類型

MongoDB中表示數值類型的數據時可以使用不同的方式。例如,使用Double表示浮點數;而使用Integer表示一個整數。下面的語句將向MongoDB的表中各插入一個Integer類型和Double類型的數據。

scott@nosql11 12> db.test1.insertOne({x1:1,x2:3.14});

MongoDB還支持使用NumberLong、NumberInt和NumberDecimal來表示數值類型的數據。下表列舉了它們之間的區別。
image.png

下面通過幾個具體的示例來演示MongoDB在存儲數值類型數據時的區別。
(1)創建一張新集合test2,並向集合中插入下面的測試數據。

scott@nosql11 7> db.test2.insert(
    [
    {_id:1,val:NumberDecimal('9.99'),Description:'Decimal'},
    {_id:2,val:9.99,Description:'Double'},
    {_id:3,val:10,Description:'Double'},
    {_id:4,val:NumberLong(10),Description:'Long'},
    {_id:5,val:NumberDecimal('10.0'),Description:'Decimal'}
    ]
    );

(2)指定下面的查詢條件查詢集合中的數據。

scott@nosql11 8> db.test2.find({'val':9.99});

# 輸出的信息如下:
{ "_id" : 2, "val" : 9.99, "Description" : "Double" }

# 條件{'val':9.99}將匹配Double類型的9.99;而不是NumberDecimal代表的9.99。

(3)如果要匹配NumberDecimal代表的9.99需要指定下面的查詢條件。

scott@nosql11 9> db.test2.find({'val':NumberDecimal('9.99')});

# 輸出的信息如下:
{ "_id" : 1, "val" : NumberDecimal("9.99"), "Description" : "Decimal" }

(4)指定下面的查詢條件查詢集合中的數據。

scott@nosql11 10> db.test2.find({'val':10});

# 輸出的信息如下:
{ "_id" : 3, "val" : 10, "Description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "Description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "Description" : "Decimal" }

# 對於整個數字10的匹配,將匹配所有的數據類型10。

(5)指定下面的查詢條件查詢集合中的數據。

scott@nosql11 11> db.test2.find({'val':NumberDecimal('10')});

# 輸出的信息如下:
{ "_id" : 3, "val" : 10, "Description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "Description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "Description" : "Decimal" }

四、 其他數據類型

對與MongoDB支持的其他幾種數據類型,如String、Boolean、Arrays、Object,下面通過一個簡單示例來進行演示。

scott@nosql11 12>  db.test3.insertOne(
    {
        _id:'stu001',
        name:'Jone',
        married:false,
        age:18,
        courses:[{cname:'語文',credit:4},
                 {cname:'英語',credit:3}
                ]
    });

# 其中:
# name:   表示姓名,是一個字符串類型的數據。
# married:表示是否結婚,是一個Boolean布爾類型的數據。
# age:    表示年齡,是一個數值類型的數據。
# courses:表示課程列表,是一個數組類型的數據。而數組中的每一個元素又是一個對象,
           包含課程的名稱和學分。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.