如MongoDB关系的最后一章所示,为了在MongoDB中实现规范化的数据库结构,无涯教程使用了引用关系的概念,也称为 Manual References ,其中无涯教程手动将参考文件的ID存储在其他文件中。但是,如果文档包含来自不同集合的引用,则可以使用 MongoDB DBRefs 。
使用DBRef
DBRefs中有三个字段-
$ref - 此字段指定引用文档的集合
$id - 此字段指定引用文档的_id字段
$db - 这是一个可选字段,包含所引用文档所在的数据库的名称
考虑一个具有DBRef字段 address 的示例用户user文档,如代码片段所示-
{ "_id":ObjectId("53402597d852426020000002"), "address": { "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "learnfk"}, "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin" }
此处的 address DBRef字段指定引用的地址文档位于 learnfk 数据库下的 address_home 集合中,并且ID为534009e4d852427820000002。
以下代码动态地在由 $ref 参数(在本示例中为 address_home )指定的集合中查找由 $id 指定的ID的文档DBRef中的参数。
>var user = db.users.findOne({"name":"Tom Benzamin"}) >var dbRef = user.address >db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
上面的代码返回 address_home 集合中存在的以下地址文档-
{ "_id" : ObjectId("534009e4d852427820000002"), "building" : "22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "California" }
参考链接
https://www.learnfk.com/mongodb/mongodb-database-references.html