MongoDB 专题
您的位置:database > MongoDB专题 > MongoDB数据库引用
MongoDB数据库引用
作者:--    发布时间:2019-11-20

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

dbrefs vs 手动参考

考虑一个示例场景,在这个场景中将使用dbrefs而不是手动引用,设计有一个数据库中将不同类型的地址(家庭,办公室,邮件等)存储在不同的集合(address_homeaddress_officeaddress_mailing等)中。 现在,当用户集合的文档引用地址时,还需要根据地址类型指定要查找的集合。 在这种情况下,文档引用了多个集合中的文档,则应该使用dbrefs。

使用dbrefs

dbrefs中有三个字段 -

  • $ref - 此字段指定引用文档的集合
  • $id - 此字段指定引用文档的_id字段
  • $db - 这是一个可选字段,并包含引用文档所在的数据库的名称

假设一个具有dbref字段address的示例用户文档,如代码片段所示 -

{
   "_id":objectid("348362491fjaskdlf2314"),
   "address": {
   "$ref": "address_home",
   "$id": objectid("sfaafdf4137832149fssa"),
   "$db": "h3"},
   "contact": "13800138000",
   "dob": "1991-12-12",
   "name": "maxsu"
}

这里的 dbref 字段 address指定引用的地址文件位于h3数据库中的address_home集合中,其id为sfaafdf4137832149fssa

以下代码由$ref参数(在示例中为address_home)指定的集合中动态地查找id为dbref中的$id参数指定的文档。

>var user = db.users.findone({"name":"maxsu"})
>var dbref = user.address
>db[dbref.$ref].findone({"_id":(dbref.$id)})

以上代码返回address_home集合中存在的以下address文档中 -

{
   "_id" : objectid("sfaafdf4137832149fssa"),
   "building" : "hainan apt no.2100",
   "pincode" : 571100,
   "city" : "haikou",
   "province" : "hainan"
}

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册