阅读 174

MongoDB 数据库引用

正如在MongoDB关系的最后一章中所看到的,为了在MongoDB中实现一个规范化的数据库结构,我们使用了被引用关系的概念(也称为手动引用),其中我们手动将被引用文档的id存储在其他文档中。但是,在文档包含来自不同集合的引用的情况下,我们可以使用MongoDB DBRefs。

DBRef与手动引用

作为示例场景,在我们将使用DBRef而不是手动引用的情况下,请考虑一个数据库,在该数据库中,我们将不同类型的地址(家庭,办公室,邮件等)存储在不同的集合中(address_home,address_office,address_mailing等)。现在,当 user 集合的文档引用地址时,它还需要根据地址类型指定要查找的集合。在文档引用多个集合中的文档的情况下,我们应该使用DBRefs。

使用DBRef

DBRefs中有三个字段-

  • $ref −此字段指定引用文档的集合

  • $id −此字段指定引用文档的_id字段

  • $db −这是一个可选字段,包含所引用文档所在的数据库的名称

考虑一个具有DBRef字段的示例用户文档,address如代码片段所示-

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "nhooo"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"}

这里的地址 DBRef 字段指定所引用的地址文档位于 nhooo 数据库下的 address_home 集合中,id 为534009e4d8524278200000002。

下面的代码动态地在由$ref参数(在我们的实例中是address_home)指定的集合中查找由DBRef中的$id参数指定的id文档。

>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"}


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐