如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