云服务器免费试用

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

服务器知识 0 1352

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

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

具体内容如下:

文档是 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"

}

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942@qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: mongodb以哪种格式表示文档结构
本文地址: https://solustack.com/46225.html

相关推荐:

网友留言:

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。