mongodb数据库教程-MongoDB数据库引用

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

如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": "yiibai"},    "contact": "13800138000",    "dob": "1991-12-12",    "name": "Maxsu" } 

这里的 DBRef 字段 address指定引用的地址文件位于yiibai数据库中的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" } 

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 mongodb数据库教程/a> 只为你绽放。

本文固定链接: http://kua0.com/2019/04/01/mongodb数据库教程-mongodb数据库引用/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注