- MongoDB 教程
- MongoDB - 首页
- MongoDB - 概述
- MongoDB - 优势
- MongoDB - 环境
- MongoDB - 数据建模
- MongoDB - 创建数据库
- MongoDB - 删除数据库
- MongoDB - 创建集合
- MongoDB - 删除集合
- MongoDB - 数据类型
- MongoDB - 插入文档
- MongoDB - 查询文档
- MongoDB - 更新文档
- MongoDB - 删除文档
- MongoDB - 投影
- MongoDB - 限制记录
- MongoDB - 排序记录
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 复制
- MongoDB - 分片
- MongoDB - 创建备份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高级 MongoDB
- MongoDB - 关系
- MongoDB - 数据库引用
- MongoDB - 覆盖查询
- MongoDB - 查询分析
- MongoDB - 原子操作
- MongoDB - 高级索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - MapReduce
- MongoDB - 文本搜索
- MongoDB - 正则表达式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 封顶集合
- 自动递增序列
- MongoDB 有用资源
- MongoDB - 问答
- MongoDB - 快速指南
- MongoDB - 有用资源
- MongoDB - 讨论
MongoDB - 数据库引用
正如在 MongoDB 关系的最后一章中所看到的,为了在 MongoDB 中实现规范化的数据库结构,我们使用引用关系的概念,也称为手动引用,其中我们手动将引用的文档 ID 存储在其他文档中。但是,在文档包含来自不同集合的引用的情况下,我们可以使用MongoDB DBRefs。
DBRefs 与手动引用
例如,在一个数据库中,我们存储不同类型的地址(家庭、办公、邮寄等)在不同的集合中(address_home、address_office、address_mailing 等)。现在,当用户集合的文档引用地址时,它还需要根据地址类型指定要查找的集合。在这种情况下,文档引用来自多个集合的文档,我们应该使用 DBRefs。
使用 DBRefs
DBRefs 有三个字段:
$ref - 此字段指定引用文档的集合
$id - 此字段指定引用文档的 _id 字段
$db - 这是一个可选字段,包含包含引用文档的数据库的名称
考虑一个示例用户文档,其中包含名为address的 DBRef 字段,如下面的代码片段所示:
{ "_id":ObjectId("53402597d852426020000002"), "address": { "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "tutorialspoint"}, "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin" }
这里的address DBRef 字段指定引用的地址文档位于tutorialspoint 数据库中的address_home 集合中,并且其 ID 为 534009e4d852427820000002。
以下代码根据$ref 参数(在本例中为address_home)动态地在指定的集合中查找 ID 为 DBRef 中$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" }
广告