我想在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.1
并All SubCategory_1.1.1.1
我有两种方法:
All SubCategory3
,并在多个查询上合并结果。我想知道哪一个更好?
您是否了解其他具有更好性能和简单性的方法?
答案 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关联的对象。