MongoDb(三)DBRef

   MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link)。内嵌比较好理解,就是字段内容是个数组,数组内再包含文档,而我们今天介绍的是另一种,称为链接DBRef。由于MongoDB对单个文档(document)有大小16M限制,设计时也要将这个限制纳入考虑。

DBRef接收主要3个参数:

  • collection: 指定原始数据所在的集合
  • id: 指定引用文档的id
  • database: 指定所引用数据库的名称

示例:

创建people集合:

db.people.insert({name: "Sky", age: "20", "dep": "CSL"})
db.people.insert({name: "Bill", age: "22", "dep": "CSL"})

在这里插入图片描述
创建DBRef:

db.deps.insert({name: "CSL", num: 15, people: [ DBRef("people", ObjectId("59b51b36a36f6ee8c75b0f68"), "admin"), DBRef("people", ObjectId("59b51b44a36f6ee8c75b0f69"), "admin")]})

注意:
1:people中生成的 _id 要写入DBRef 中
2:admin 这个数据库要写对

那么如何引用呢?

db.deps.findOne({"name": "CSL"}).people[0].fetch()
db.deps.findOne({"name": "CSL"}).people[1].fetch()

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBRefMongoDB中一种特殊的数据类型,用于在不同文档之间建立关联关系。它的全称是Database Reference,可以理解为数据库引用。 DBRef通常用于在两个文档之间建立关联,类似于关系型数据库中的外键。在一个文档中,可以使用DBRef类型字段引用另一个文档的_id字段。这个_id字段可以是内部文档的_id或者外部文档的_id。使用DBRef可以省去在一个文档中存储另一个文档的所有字段的麻烦,同时也方便了文档之间的查询和更新操作。 在Java Spring Data MongoDB中,可以使用@DBRef注解来定义DBRef类型字段。例如: ```java public class Order { @Id private String id; private String name; @DBRef private User user; // getters and setters } public class User { @Id private String id; private String username; // getters and setters } ``` 在上面的例子中,Order类中的user字段是一个DBRef类型字段,它引用了User类的_id字段。使用@DBRef注解告诉Spring Data MongoDB这个字段是一个DBRef类型的字段。 当查询Order文档时,可以通过user字段的_id属性查询关联的User文档,例如: ```java Order order = mongoTemplate.findById("order_id", Order.class); User user = order.getUser(); String userId = user.getId(); User user = mongoTemplate.findById(userId, User.class); ``` 这个例子中,首先查询了一个Order文档,然后通过Order文档中的user字段的_id属性查询了关联的User文档。 需要注意的是,使用DBRef需要谨慎,因为它可能导致文档之间的循环引用,同时也会增加查询和存储的复杂性。因此,在使用DBRef时应该根据具体情况进行权衡和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值