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实现数据间的高效引用与关联,避免了传统JOIN操作,显著提高了查询性能并简化了数据管理。以实例展示了如何创建和引用DBRef,以及如何通过DBRef查询相关数据,从而减少冗余存储和提高系统效率。
9691

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



