我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

计算机中要想观察一个长文档的总体结构应当使用哪种方式

这篇文章主要为大家展示了“计算机中要想观察一个长文档的总体结构应当使用哪种方式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“计算机中要想观察一个长文档的总体结构应当使用哪种方式”这篇文章吧。要想
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录