DBRef is a more formal specification for creating references between documents. DBRefs (generally) include a collection name as well as an object id. Most developers only use DBRefs if the collection can change from one document to the next. If your referenced collection will always be the same, the manual references outlined above are more efficient.
^_^[root@:/usr/local/mongodb/bin]#./mongo MongoDB shell version: 1.8.2 connecting to: test > var a = {name:"C++"} > db test > db.language.save(a) > db.language.find() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } > var b = {name:"javascript"} > db.language.save(b) > db.language.find() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" } > lan = {name:"obj1",computer:[new DBRef('language',a._id)]} { "name" : "obj1", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } ] } > lan.computer[0] { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } > lan.computer[0].fetch() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } > db.language.insert(lan) > db.language.find() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" } { "_id" : ObjectId("4da33b487d2de864e0448e08"), "name" : "obj1", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } ] } > db.language.findOne({name:"obj1"}).computer[0].fetch() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } > lan2 = {name:"obj2",computer:[new DBRef('language',b._id)]} { "name" : "obj2", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32cb17d2de864e0448e07") } ] } > db.language.insert(lan2) > db.language.find() { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" } { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" } { "_id" : ObjectId("4da33b487d2de864e0448e08"), "name" : "obj1", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } ] }相关数据存放在一起,针对性的查询可以消除join,性能比分散存储要高且方便
本文介绍了MongoDB中DBRef的使用方法,包括如何创建文档之间的引用,并通过示例展示了如何利用DBRef进行数据查询及关联操作。文章还讨论了在不同场景下使用DBRef与直接引用的区别。
84

被折叠的 条评论
为什么被折叠?



