使用和填充(真实的)DBREF阵列与Mongoose / Mongoose-Dbref



mongoose似乎不支持mongo dbrefs。显然,他们发布了" DBREF"支持,但实际上只是简单的参考文献(没有能力参考不同集合中的文档)。我终于设法制作了一个模式,使我能够持有一系列objectid参考并填充它们,这对于我的模式的某些部分非常有用,但是如果我可以使用适当的dbrefs创建一个数组,那将非常方便让我参考许多收藏中的文档。

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

不幸的是,我对文档没有任何意义。我能说的最好的是,没有能力在数组中使用dbref(有一种"提取"方法可以解除,但需要一个dbref);"填充"似乎没有修补以填充dbrefs,我无法说出我应该如何分配 dbref给定源文档[collection.items.push(?????)]。

从Internet中,我可以分配一个表单的对象{$ id:document._id,$ ref:'collection'} - 在记录结果时,它似乎已将"取"为dbref数据类型,但是我不确定这是否正确,因为我似乎无法对其做任何有用的事情(将Ref返回到文档)。

我真正想要的是代表来自多个收藏的项目列表的一种方法;我对此的任何解决方案都很好,但是到目前为止,DBREF是我最好的。帮助?

a dbref(在此处详细说明)是包含objectID,集合名称以及可能在另一个集合中引用对象的数据库容器名称的元组。

在MongoDB服务器内部内部无用,只是文档中的数据。重点是在某些驱动程序和ODM实现中使用,以通过向服务器发出其他查询来允许某种自动扩展,以便将其他地方的数据似乎是引用文档的普通子文件部分。根据实现,这可以是自动的,也可以是懒惰的负载,但始终是通过电线完成并在客户端处理的。服务器将无助于遍历或加入此数据。

此外,MongoDB的集合是示意性的,因此没有什么比在关系意义上说集合中的所有文档都必须具有相同结构的东西。

在猫鼬的情况下,有内置的功能可以为您提供此类加载,虽然并非严格地是DBREF,并且在同一集合中使用不同的模式使用文档,其手段与存储的方式相同引用文档外部文档。

重要的是要考虑应用程序的数据访问模式,而不是简单地选择与您相同的关系设计。请记住,您只能一次从一个集合中阅读,最需要在单个读取或写入中获得所需的数据,而无需对电线进行多次操作,这将大大减慢。P>

简而言之,您应始终考虑首先嵌入子文档,然后只有在绝对需要的情况下才能使用最佳支持的表格。您的应用程序用户最终会感谢您。

最新更新