mongodb中的数据建模

本文介绍了MongoDB的数据建模,包括一对一、一对多和多对多关系。提到MongoDB对单个文档有16M大小限制。多对多关系使用连接,有手动引用和DBRef两种引用方式,还对比了二者特点。最后指出实际建模要根据具体需求分析操作来选Embed和Link。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一对一的关系:Embed,比如用户信息集合有Address字段,Address字段有省、市、县三个字段。建模如下:

QQ截图20120725190049

QQ截图20120725185306

一对多关系:一篇文章有多条评论,为1对多关系

QQ截图20120725185727QQ截图20120725190617

由于MongoDB对单个文档(document)有大小限制16M(高于v1.8),设计时也要将这个限制纳入考虑中。

多对多关系:学生和课程是多对多的关系,一个学生可以选多门课程,一门课程有多名学生参与。

QQ截图20120725190110

多对多使用了连接(Linking),连接是通过引用(References)来连接两个集合。MongoDB References有两种:一种是 手动引用(Manual References),另一种是DBRefs。

Manual References:

QQ截图20120725192451(user集合)

QQ截图20120725192634(post集合)

红框地方就是Manual References,如果想查询一篇文章的作者信息,首先在post集合找出那篇文章,然后在user集合查找出用户的全部信息。但是假如有这么一个场 景:用户可以对图片,文章等各种资源评论,所有的评论都放在comment集合中,如果只是使用Manual References,就分不清楚评论到底是属于哪类资源了,图片?文章?。所以有了DBRef。

DBRef的形式:

{ $ref : <value>, $id : <value>, $db : <value> }

$ref:集合名称;$id:引用的id;$db:数据库名称,可选参数。

可以看到DBRef的结构比Manual References的复杂,占用的空间大,但是功能也强大,如果要跨数据库连接,上面讲的评论集合的例子,都得需要使用DBRef,MongoDB提供 了函数来解析DBRef,不用像Manual References需要自己手动写两次查询。

QQ截图20120725195916

关于MongoDB的数据建模MongoDB官网也给出了一些建议。这些建议都是提供了一些参考,实际建模需要根据具体的需求来分析,分析数据经常会执行哪些操作(排序,查找,修改)来选择Embed和Link。


本文出自 “ghost” 博客,请务必保留此出处http://caizi.blog.51cto.com/5234706/1542484

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值