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


mongodb以BSON格式表示文档结构,它是一个基于分布式文件存储的开源数据库系统,它的特点是高性能、易部署、易使用,存储数据非常方便。

具体内容如下:

文档是 MongoDB 的核心概念,是数据的基本单元,与关系数据库中的行十分类似,但是比行要复杂。文档是一组有序的键值对集合。文档的数据结构与 JSON 基本相同,所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类 JSON 的二进制存储格式,是 Binary JSON 的简称。 一个简单的文档例子如下:

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

MongoDB 中的数据具有灵活的架构,集合不强制要求文档结构。但数据建模的不同可能会影响程序性能和数据库容量。文档之间的关系是数据建模需要考虑的重要因素。文档与文档之间 的关系包括嵌入和引用两种。

下面举一个关于顾客 patron 和地址 address 之间的例子,来说明在某些情况下,嵌入优于引用。

{

_id:"joe",

name:"JoeBookreader"

}

{

patron_id:"joe",

street:"123FakeStreet",

city:"Faketon",

state:"MA",

zip:"2345"

}

关系数据库的数据模型在设计时,将 patron 和 address 分到两个表中,在查询时进行关联, 这就是引用的使用方式。如果在实际查询中,需要频繁地通过 _id 获得 address 信息,那么就需要频繁地通过关联引用来返回查询结果。在这种情况下,一个更合适的数据模型就是嵌入。

将 address 信息嵌入 patron 信息中,这样通过一次查询就可获得完整的 patron 和 address 信息,如下所示:

{

_id:"joe",

name:"JoeBookreader",

address:{

street:"123FakeStreet",

city:"Faketon”,

state:nMAnz

zip:T2345”

}

}

如果具有多个 address,可以将其嵌入 patron 中,通过一次查询就可获得完整的 patron 和多个 address 信息,如下所示:

{

_id:"joe",

name:"JoeBookreader",

addresses:[

{

street:"123FakeStreetn,

city:"Faketon",

state:"MA",

zip:"12345"

},

{

street:"lSomeOtherStreet",

city:"Boston",

state:"MA",

zip:"12345"

}

]

}

但在某种情况下,引用用比嵌入更有优势。下面举一个图书出版商与图书信息的例子,代码如下:

{

title:"MongoDB:TheDefinitiveGuide",

author:["KristinaChodorow","MikeDirolfn"],

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

pages:216,

language:"English",

publisher:{

name:"O'ReillyMedia",

founded:1980,

location:"CA"

}

}

{

title:"50TipsandTricksforMongoDBDeveloper",

author:"KristinaChodorow",

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

pages:68,

language:"English",

publisher:{

name:"O'ReillyMedia",

founded:1980,

location:"CA"

}

}

从上边例子可以看出,嵌入式的关系导致出版商的信息重复发布,这时可采用引用的方式描述集合之间的关系。使用引用时,关系的增长速度决定了引用的存储位置。如果每个出版商的图书数量很少且增长有限,那么将图书信息存储在出版商文档中是可行的。

通过 books 存储每本图书的 id 信息,就可以查询到指定图书出版商的指定图书信息,但如果图书出版商的图书数量很多, 则此数据模型将导致可变的、不断增长的数组 books,如下所示:

{

name:"O'ReillyMedia",

founded:1980,

location:"CA",

books:[123456789,234567890,…]

}

{

_id:123456789,

title:"MongoDE:TheDefinitiveGuide",

author:["KristinaChodorow","MikeDirolf"],

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

pages:216,

language:"English"

}

{

_id:234567890,

title:"50TipsandTricksforMongoDBDeveloper",

author:"KristinaChodorow",

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

pages:68,

language:"English"

}

为了避免可变的、不断增长的数组,可以将出版商引用存放到图书文档中,如下所示:

{

_id:"oreilly",

name:"O'ReillyMedia",

founded:1980,

location:"CA"

}

{

_id:123456789,

title:"MongoDB:TheDefinitiveGuiden,

author:["KristinaChodorow","MikeDirolf"],

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

pages:216,

language:"English",

publisher_id:"oreilly"

}

{

_id:234567890,

title:"50TipsandTricksforMongoDBDeveloper",

author:"KristinaChodorow",

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

pages:68,

language:"English",

publisher_id:"oreilly"

}


上一篇:为什么不首选32位版本的mongodb

下一篇:弹性公网IP的应用场景有哪些


mongodb
Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器