首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用蒙鹅/猫鼬- DBRef使用和填充(实)dbref数组

使用蒙鹅/猫鼬- DBRef使用和填充(实)dbref数组
EN

Stack Overflow用户
提问于 2014-01-31 21:12:05
回答 1查看 2.5K关注 0票数 0

猫鼬似乎不支持Mongo DBRefs。显然,他们发布了"DBRef“支持,但实际上它只是简单的引用(无法引用来自不同集合的文档)。我终于成功地创建了一个模式,允许我保存一个ObjectID引用数组并填充它们,这对于我的模式的某些部分是很好的,但是如果我能够使用适当的DBRefs来创建一个数组,允许我引用来自许多集合的文档,那将是非常方便的。

幸运的(?)有一个模块可以将DBRef支持猴子补丁到猫鼬中:https://github.com/goulash1971/mongoose-dbref

不幸的是,我无法理解这些文件。我所能知道的最好是,数组中没有使用DBRefs的能力(取消引用有一个'fetch‘方法,但它需要一个dbref);“populate”似乎没有修补以填充DBRefs,而且我也不知道如何分配给定一个源文档collection.items.push(?)的DBRef。

从互联网上看,我似乎可以分配表单{ $id: document._id,$ref:'Collection‘}的一个对象--在记录结果时,它似乎将“接受”为DBRef数据类型,但我不确定这是否正确,因为我似乎无法对它做任何有用的事情(将ref转换回文档)。

我真正想要的是一种表示来自多个集合的项目的有序列表的方法;解决这个问题的任何解决方案都可以,但到目前为止,DBRefs是我所拥有的最好的解决方案。帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 00:59:27

DBRef (如在这里详细解释)是一个元组,包含另一个集合中引用对象的ObjectId、集合名称和数据库容器名称。

在MongoDB服务器内部,它们没有任何用途,只是文档中的数据。重点是在一些驱动程序和ODM实现中使用,通过向服务器发出额外的查询来允许某种类型的自动扩展,以便使其他地方的数据似乎是引用文档的一个普通子文档部分。这可以是自动的,也可以是延迟的负载,这取决于实现,但总是通过线上完成,并在客户端处理。服务器将不执行任何操作来遍历或加入这些数据。

此外,MongoDB集合是无模式的,因此在关系意义上没有任何东西可以表示集合中的所有文档都必须具有相同的结构。

在Mongoose的例子中,有内置函数为您提供方便地进行这种加载,虽然不是严格意义上的DBRef,但是在同一个集合中使用不同模式的文档与存储引用文档外部的文档是一样的。

重要的是要考虑应用程序的数据访问模式,而不是简单地选择您习惯的那种关系设计。请记住,您一次只从一个集合中读取数据,最好是在一次读或写中获得所需的数据,而不需要在线路上进行多次操作,这将大大减慢速度。

简而言之,您应该始终考虑先嵌入子文档,然后只在绝对必要时才使用外部引用(任何您最支持的表单)。您的应用程序用户最终会感谢您的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21490131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档