在同一集合中创建对象的 mongodb 模式数组或创建新集合的更好方法保存引用

Posted

技术标签:

【中文标题】在同一集合中创建对象的 mongodb 模式数组或创建新集合的更好方法保存引用【英文标题】:Better approach to create mongodb schema array of objects in same collection or create new collection save a reference 【发布时间】:2020-09-22 17:46:45 【问题描述】:

我很想知道设计架构的更好方法

1) 假设集合 xyz


field1:anything
field2: anything
pqr:[ name:String , value:Number ]

2)

 xyz collection        and pqr collection
                                      
                                           reference id of xyz,
                                           name:String , 
                                          value:Numbee
    field1:anything                    
    field2: anything

    

注意:考虑到第一种方法数组的大小不会超过 250

【问题讨论】:

【参考方案1】:

我认为第一种方法比第二种方法更好,因为数组字段中的对象并不复杂。 但我认为你应该看到你会回应的请求。例如,如果您有请求GET /xyz 并且您不需要返回 pqr 数组,则选择第一种方法。 但是,如果您有请求 GET /xyz/:id/pqr 或者您需要在 GET /xyz 中返回 pqr 数组,则第二种方法更好,因为您可能希望对此请求进行分页,而第二种方法很容易实现,因为它是 db.collection.find(query).skip(page * size).limit(size),但在第一种方法中,您必须在内存中或通过聚合解决此问题。

PD:对不起我的英语。

【讨论】:

感谢您努力回答这个问题,但如果我们知道文档的限制不会超过上述阈值 250,那么我的担忧与设计模式的效率和最佳实践有关创建新系列的明智之举。仅供参考,如果记录可以是不确定的,那么第二种方法是最佳的,但我想知道数组是否可以解决问题。 好的,我明白你的疑问了,谢谢。关于您对数组大小的评论,我同意您的看法。 Mongo 的无模式允许您对数组字段进行非规范化,因此如果数组在您的模型中有意义并且易于管理,那么我推荐第一个选项。此外,通过这种方法,您可以避免$lookup 阶段,这将更有效。保重

以上是关于在同一集合中创建对象的 mongodb 模式数组或创建新集合的更好方法保存引用的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB聚合在根中创建内部数组

Mongodb _id 在同一个集合中有两种不同的数据类型

如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象

尝试使用 mongodb 插件在 grails 中创建 mongodb 集合

从数组中创建集合,其中包含自定义对象的数组

JavaScript中创建对象的7种模式