开发手册 欢迎您!
软件开发者资料库

MongoDB - 数据库参考

MongoDB数据库参考 - 从简单和简单的步骤学习MongoDB,从基本到高级概念,包括什么是mongoD?,为什么以及在哪里使用它?,环境设置,创建集合,文档。

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

DBRefs vs Manual References

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

使用DBRefs

DBRefs中有三个字段;

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

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

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

考虑具有DBRef字段的示例用户文档地址,如代码段中所示 :

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

这里的地址 DBRef字段指定引用的地址文档位于 address_home 集合中 it1352数据库,ID为534009e4d852427820000002.

以下代码动态查找 $ref 参数指定的集合(对于在DBRef中由 $id 参数指定的id的文档,在我们的例子中为address_home .

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