文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mongodb以哪种格式表示文档结构

2024-04-02 19:55

关注

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"

}

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯