2011-12-14 52 views
2

您好我是mongoDB和Mongoid的新手,对于何时使用嵌入式文档以及嵌入深度有点困惑。我应该用Mongoid嵌入多深?

因此,一个虚构的例子:

Library collection has_many :books, which embeds_many :pages, which embeds_many :sections

既然不能一起工作直接说第一节有走线槽books.pages.sections,对不对?

这会导致这条路线,libraries/:id/books/:id/pages/:id/sections/:id 这似乎有点疯狂,最好的做法是只嵌套一个层次,对吧? 一种方法是获得路线pages/:id/sections/:id,然后将bookid粘贴在请求中?

难道是很难的说,部分查询?例如,如果我需要找到所有部分有标签x的书籍?

但是,如果我不使嵌入所有我将有一个额外的查询的方式吗?

有人可以提供一些线索?谢谢。

+1

路由并未明确与您的数据库设计有关。你真的应该避免这种深层嵌套的路线;在大多数情况下,他们没有必要。 – asaaki 2011-12-14 18:01:02

回答

6

首先我认为,没有人可以给你,你应该如何深深嵌入文档正确的答案。它高度依赖于您的具体项目要求。一般而言,您应回答一些问题以选择适当的架构设计:

  1. 用户是否会同时更新集合中的相同对象? (或者如果客户失去了更新,我的老板会怎么说)
  2. 我需要支持原子操作吗?
  3. 我是否需要独立显示嵌套集合或者是否与父节点查询?
  4. 我是否需要对嵌入对象进行排序?
  5. 我是否需要查询嵌入式对象?

如果你会回答1,2-真实的; 3我需要单独展示他们(不同的页面); 4,5 - 真的,我相信嵌入会对你的屁股造成某种痛苦。

额外查询不应该是我想的一个问题。

+0

另请参阅:http://www.mongodb.org/display/DOCS/Schema+Design – asaaki 2011-12-14 17:58:35