MongoDB DBRef和手动引用(Manual References)
来源:互联网 发布:单机手机游戏 知乎 编辑:程序博客网 时间:2024/05/16 01:36
http://www.cnblogs.com/alab/archive/2012/07/25/2608905.html
MongoDB之数据建模
MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型。MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link)。那么何时Embed何时Link呢?那得看两个实体之间的关系是什么类型。
一对一的关系:Embed,比如用户信息集合有Address字段,Address字段有省、市、县三个字段。建模如下:
一对多关系:一篇文章有多条评论,为1对多关系
由于MongoDB对单个文档(document)有大小限制16M(高于v1.8),设计时也要将这个限制纳入考虑中。
多对多关系:学生和课程是多对多的关系,一个学生可以选多门课程,一门课程有多名学生参与。
多对多使用了连接(Linking),连接是通过引用(References)来连接两个集合。MongoDB References有两种:一种是 手动引用(Manual References),另一种是DBRefs。
Manual References:
(user集合)
(post集合)
红框地方就是Manual References,如果想查询一篇文章的作者信息,首先在post集合找出那篇文章,然后在user集合查找出用户的全部信息。但是假如有这么一个场景:用户可以对图片,文章等各种资源评论,所有的评论都放在comment集合中,如果只是使用Manual References,就分不清楚评论到底是属于哪类资源了,图片?文章?。所以有了DBRef。
DBRef的形式:
{ $ref : <value>, $id : <value>, $db : <value> }
$ref:集合名称;$id:引用的id;$db:数据库名称,可选参数。DBRef只能有这三个键,不能再添加其他键。
可以看到DBRef的结构比Manual References的复杂,占用的空间大,但是功能也强大,如果要跨数据库连接,上面讲的评论集合的例子,都得需要使用DBRef,MongoDB提供了函数来解析DBRef,不用像Manual References需要自己手动写两次查询。
关于MongoDB的数据建模MongoDB官网也给出了一些建议。这些建议都是提供了一些参考,实际建模需要根据具体的需求来分析,分析数据经常会执行哪些操作(排序,查找,修改)来选择Embed和Link。
DBRefs 示例:
db.foo.find()
{ "_id" : ObjectId("59379e0c2e7a03e326cc7553"), "arr" : [ { "x" : 1 }, { "y" : 2 } ]}建立一个DBRefs,
db.test.insert({value: {$ref: "foo", $id: ObjectId("59379e0c2e7a03e326cc7553")}, a: 1})db.test.find().pretty(){ "_id" : ObjectId("5937a3df2e7a03e326cc7559"), "value" : DBRef("foo", ObjectId("59379e0c2e7a03e326cc7553")), "a" : 1}db.test.findOne({a: 1}).value.fetch(){ "_id" : ObjectId("59379e0c2e7a03e326cc7553"), "arr" : [ { "x" : 1 }, { "y" : 2 } ]}
如果是数组,则需要用以下方式:
db.test.findOne({a: 1}).value[0].fetch();
阅读全文
0 0
- MongoDB DBRef和手动引用(Manual References)
- mongodb数据库引用DBRef
- 利用DBREF实现MongoDB的引用("外键")
- MongoDB:12-MongoDB 数据库引用(DBRefs vs 手动引用)
- mongoDB中的DBRef
- mongodb 多表关联的实现和DBRef理解,
- 引用(References)
- spring-mongodb-DBRef的运用
- MongoDB 通过 DBRef关联查询
- 引用 References
- 引用( References )
- Spring Data Mongodb DBRef联级存储
- 引用(references)与指针(pointers)
- php引用(&)详解及注意事项 摘自:PHP引用(&)使用详解 官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.
- Mongodb aggregate group DBRef类型,并处理返回的DBRef数据Demo
- C++引用和拷贝构造函数(References & the Copy-Constructor)
- 添加web引用和添加服务引用有什么区别?Add Service References 和 Add Web References 有啥区别?
- 手动释放(dispose)对象空间和跟踪引用计数
- mma格式转TeX格式
- xcode里面怎么给文件加前缀
- VC 6.0配置parseGen
- Maven项目中获取classpath和资源文件的路径
- NOLO今日登陆上海CES:完美运行Steam VR的国产神器
- MongoDB DBRef和手动引用(Manual References)
- git使用时出错
- Unix/Linux编程实践教程–ac在Ubuntu 14.04的实现
- tomcat开启二级域名访问设置
- 【C#】深度理解虚方法 继承 以及接口的简单使用
- Eclipse+Maven+Tomcat+JRebel实现项目的热部署
- python numpy ndarray astype error
- linux 常用脚本
- 织梦cms出现DedeTag Engine Create File False的解决