中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

mongodb以哪種格式表示文檔結構

小晨
217
2021-07-19 10:22:44
欄目: 云計算

mongodb以BSON格式表示文檔結構,它是一個基于分布式文件存儲的開源數據庫系統,它的特點是高性能、易部署、易使用,存儲數據非常方便。

mongodb以哪種格式表示文檔結構

具體內容如下:

文檔是 MongoDB 的核心概念,是數據的基本單元,與關系數據庫中的行十分類似,但是比行要復雜。文檔是一組有序的鍵值對集合。文檔的數據結構與 JSON 基本相同,所有存儲在集合中的數據都是 BSON 格式。

BSON 是一種類 JSON 的二進制存儲格式,是 Binary JSON 的簡稱。 一個簡單的文檔例子如下:

{"country" : "China", "city": "BeiJing"}

MongoDB 中的數據具有靈活的架構,集合不強制要求文檔結構。但數據建模的不同可能會影響程序性能和數據庫容量。文檔之間的關系是數據建模需要考慮的重要因素。文檔與文檔之間 的關系包括嵌入和引用兩種。

下面舉一個關于顧客 patron 和地址 address 之間的例子,來說明在某些情況下,嵌入優于引用。

{

    _id: "joe",

    name: "Joe Bookreader"

}

{

    patron_id: "joe",

    street: "123 Fake Street",

    city: "Faketon",

    state: "MA",

    zip: "2345"

}

關系數據庫的數據模型在設計時,將 patron 和 address 分到兩個表中,在查詢時進行關聯, 這就是引用的使用方式。如果在實際查詢中,需要頻繁地通過 _id 獲得 address 信息,那么就需要頻繁地通過關聯引用來返回查詢結果。在這種情況下,一個更合適的數據模型就是嵌入。

將 address 信息嵌入 patron 信息中,這樣通過一次查詢就可獲得完整的 patron 和 address 信息,如下所示:

{

    _id: "joe",

    name: "Joe Bookreader",

    address: {

        street: "123 Fake Street",

        city: "Faketon”,

        state: nMAnz

        zip: T2345”

    }

}

如果具有多個 address,可以將其嵌入 patron 中,通過一次查詢就可獲得完整的 patron 和多個 address 信息,如下所示:

{

    _id: "joe",

    name: "Joe Bookreader",

    addresses:[

        {

            street: "123 Fake Streetn,

            city: "Faketon",

            state: "MA",

            zip: "12345"

        },

        {

            street: "l Some Other Street",

            city: "Boston",

            state: "MA",

            zip: "12345"

        }

    ]

}

但在某種情況下,引用用比嵌入更有優勢。下面舉一個圖書出版商與圖書信息的例子,代碼如下:

{

    title: "MongoDB: The Definitive Guide",

    author: [ "Kristina Chodorow", "Mike Dirolfn"],

    published_date: ISODate("2010-09-24"),

    pages: 216,

    language: "English",

    publisher: {

        name: "O'Reilly Media",

        founded: 1980,

        location: "CA"

    }

}

{

    title: "50 Tips and Tricks for MongoDB Developer",

    author: "Kristina Chodorow",

    published_date: ISODate("2011-05-06"),

    pages: 68,

    language: "English",

    publisher: {

        name: "O'Reilly Media",

        founded: 1980,

        location: "CA"

    }

}

從上邊例子可以看出,嵌入式的關系導致出版商的信息重復發布,這時可采用引用的方式描述集合之間的關系。使用引用時,關系的增長速度決定了引用的存儲位置。如果每個出版商的圖書數量很少且增長有限,那么將圖書信息存儲在出版商文檔中是可行的。

通過 books 存儲每本圖書的 id 信息,就可以查詢到指定圖書出版商的指定圖書信息,但如果圖書出版商的圖書數量很多, 則此數據模型將導致可變的、不斷增長的數組 books,如下所示:

{

    name: "O'Reilly Media",

    founded: 1980,

    location: "CA",

    books: [123456789, 234567890, …]

}

{

    _id: 123456789,

    title: "MongoDE: The Definitive Guide",

    author: ["Kristina Chodorow", "Mike Dirolf"],

    published_date: ISODate("2010-09-24"),

    pages: 216,

    language: "English"

}

{

    _id: 234567890,

    title: "50 Tips and Tricks for MongoDB Developer",

    author: "Kristina Chodorow",

    published_date: ISODate("2011-05-06"),

    pages: 68,

    language: "English"

}

為了避免可變的、不斷增長的數組,可以將出版商引用存放到圖書文檔中,如下所示:

{

    _id: "oreilly",

    name: "O'Reilly Media",

    founded: 1980,

    location: "CA"

}

{

    _id: 123456789,

    title: "MongoDB: The Definitive Guiden,

    author: [ "Kristina Chodorow", "Mike Dirolf"],

    published_date: ISODate("2010-09-24"),

    pages: 216,

    language: "English",

    publisher_id: "oreilly"

}

{

    _id: 234567890,

    title: "50 Tips and Tricks for MongoDB Developer",

    author: "Kristina Chodorow",

    published date: ISODate("2011-05-06"),

    pages: 68,

    language: "English",

    publisher_id: "oreilly"

}

0
霍邱县| 平凉市| 孟村| 蒙城县| 西平县| 原阳县| 钦州市| 长葛市| 重庆市| 子长县| 来宾市| 讷河市| 佳木斯市| 西城区| 株洲县| 邹城市| 吴桥县| 洛隆县| 武邑县| 无棣县| 兴和县| 郁南县| 建水县| 廊坊市| 临猗县| 永嘉县| 勃利县| 资兴市| 贺兰县| 普洱| 镇安县| 苍溪县| 大庆市| 营山县| 连州市| 三亚市| 高唐县| 南通市| 彰武县| 大邑县| 临洮县|