MongoDBDBRefs:多表关联查询

在《MongoDB关系》一节中,为了在 MongoDB 中实现规范化的数据库结构,我们使用了引用式关系(也称为手动引用)的概念,在手动引用中,我们需要将被引用文档的 _id 存储在其他文档中。当文档中需要引用来自不同集合数据的情况下,我们可以使用 MongoDB 中的 DBRefs。

10年积累的网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有永昌免费网站建设让你可以放心的选择与我们合作。

DBRefs 与手动引用

假如有这样一个数据库,其中有一个 users 集合,用来存储用户信息,以及其它一些集合(例如 address_home、address_office、address_mailing 等),用来存储不同类型的地址数据。

当我们需要通过 users 集合来引用这些存有地址信息的集合时,需要根据地址类型来指定要查看的集合,在这种文档需要引用其它多个集合中文档的情况下,我们可以使用 DBRefs。

使用 DBRefs

DBRef 的语法形式如下:

{ $ref : value, $id : value, $db : value }

DBRefs 中有以下三个字段:

  • $ref:此字段用来指定要引用文档所在的集合;
  • $id:此字段用来指定要引用文档的 _id 字段值;
  • $db:可选字段,用来指定要引用文档所在的数据库名称;
  • value:表示各个字段所对应的值。

在下面示例的 users 文档中,address 字段就使用了 DBRefs:

{
    "_id" : ObjectId("603c93f2f2c28d0fdf74ae7b"),
    "phone" : "15011226666",
    "pincode" : "01-01-1991",
    "name" : "bianchengbang",
    "address": {
        "$ref": "address_home",
        "$id": ObjectId("603c9355f2c28d0fdf74ae79"),
        "$db": "bianchengbang"
    }
}

上面的 address 字段指定了引用的文档位于“bianchengbang”数据库下的“address_home”集合中,文档的 _id 值为 603c9355f2c28d0fdf74ae79。

下面通过一个具体的示例来演示 DBRefs 的使用:

> var user = db.users.findOne({"name":"bianchengbang"})
> var dbRef = user.address
> db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
{
        "_id" : ObjectId("603c9355f2c28d0fdf74ae79"),
        "place" : "22 A, Indiana Apt",
        "postcode" : 123456,
        "city" : "Los Angeles",
        "country" : "California"
}

上面的示例代码中 $ref 参数指定了集合的名称(本例中是 address_home),并在其中动态查找 _id 为 DBRef 中 $id 参数指定的文档。

本文题目:MongoDBDBRefs:多表关联查询
分享地址:http://www.shufengxianlan.com/qtweb/news43/73043.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联