gpt4 book ai didi

mongodb - MongoDb 中 $ref (DBRef) 的真正目的是什么

转载 作者:IT老高 更新时间:2023-10-28 13:21:22 26 4
gpt4 key购买 nike

我想在我的应用程序中使用 mongo,当我在考虑设计问题时,我提出了一个问题,那么 DBRef 的优点/用途是什么?

例如:

> names = ['apple', 'banana', 'orange', 'peach', 'pineapple']
[ "apple", "banana", "orange", "peach", "pineapple" ]
> for (i=0; i<5; i++) {
... db.fruits.insert({_id:i, name:names[i]})
... }
> db.fruits.find()
{ "_id" : 0, "name" : "apple" }
{ "_id" : 1, "name" : "banana" }
{ "_id" : 2, "name" : "orange" }
{ "_id" : 3, "name" : "peach" }
{ "_id" : 4, "name" : "pineapple" }

我想把这些水果放在一个篮子里:

> db.basket.insert({_id:1, items:[ {$ref:'fruits', $id:1}, {$ref:'fruits', $id:3} ] })
> db.basket.insert({_id:2, items:[{fruit_id: 1}, {fruit_id: 3}]})
> db.basket.find()
{ "_id" : 1, "items" : [ DBRef("fruits", 1), DBRef("fruits", 3) ] }
{ "_id" : 2, "items" : [ { "fruit_id" : 1 }, { "fruit_id" : 3 } ] }

这两种技术之间的真正区别是什么?对我来说,使用 DBRef 看起来你只需要插入更多数据而没有任何优势......如果我错了,请纠正我。

最佳答案

基本上,DBRef 是一个自描述的 ObjectID,它是一个存在于所有驱动程序(我认为是所有驱动程序)中的客户端助手,它提供了在您的应用程序中轻松获取相关行的能力。

他们不是:

  • 加入
  • 可级联关系
  • 服务器端关系
  • 已解决服务器端

它们也没有在 Map Reduce 中使用,由于分片的复杂性,该功能被取消了。

但使用这些并不总是很好,因为如果您知道与该行相关的集合与仅存储 ObjectID 相比,它们会占用相当多的空间。不仅如此,而且由于它们的解析方式,如果能够(轻松)形成一个范围以一次性查询相关行,则每个相关记录都需要一个一个延迟加载,因此它们可以增加查询量您也对数据库进行了操作,从而增加了游标。

关于mongodb - MongoDb 中 $ref (DBRef) 的真正目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com