Mongo和Meteor中嵌套类别的最佳实践

时间:2016-01-21 09:08:43

标签: mongodb meteor database-design mongodb-query nosql

我想在Mongo和Meteor框架中处理几个广告的嵌套类别。例如:

广告 对象的类别字段如下:

myEvent

例如 Ad_1 对象属于 SubCategory_1.1.1.1

此外,我想通过以下查询访问Ad_1:

MainCategory_1 > SubCategory_1.1 > SubCategory_1.1.1 > SubCategory_1.1.1.1 > { Ad_1 HERE } > SubCategory_1.2 > SubCategory_1.2.1 > SubCategory_1.3 MainCategory_2 > SubCategory_2.1 > SubCategory_2.1.1 > SubCategory_2.1.1.1 > SubCategory_2.2 > SubCategory_2.2.1 > SubCategory_2.3 All MainCategory_1 All SubCategory_1.1 All SubCategory_1.1.1All SubCategory_1.1.1.1

我有两种方法:

  1. 为每个对象存储All SubCategory3,并在多个查询上合并结果。
  2. 将类别存储为该字符串的路径和查询字符串 领域。喜欢this回答。
  3. 我想知道哪一个更好?

    您是否了解其他具有更好性能和简单性的方法?

1 个答案:

答案 0 :(得分:2)

它在很大程度上取决于对象之间的关系(即关系两侧的对象数量与更新频率之比),因此取决于您的应用和要求。

一个很好的资源(可能被视为“最佳实践”)是MongoDB关于非规范化的博客:

http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1

http://blog.mongodb.org/post/87892923503/6-rules-of-thumb-for-mongodb-schema-design-part-2

http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3

非常简短,因为它是一个广泛的主题: 我们谈论的是N-N关系,它取决于N的比率

如果对象是不可变的,建议将它们嵌套在另一个对象中,因为您不必处理更新,搜索也很简单。

如果对象不是不可变的,则必须加权更新的成本与搜索集合以查找ID的成本,然后在其他集合中搜索与该/那些ID关联的对象。