2010-01-26 250 views
27

我无法理解如何在MongoDB中过滤嵌入式文档,并开始认为我应该使用关系关联,但在文档存储上下文中感觉不对。在MongoDB中过滤嵌入式文档

具有典型的博客/评论系统坚持,我有一个blogs集合,每个blog有许多comments。评论将作为嵌入式文档存储在博客文档中。

这是非常简单的过滤我blogs集,但为了筛选我comments嵌入在每个blog,我有他们全部加载到内存中(检索所有进入一个Ruby数组),并通过每个注释循环,返回符合特定标准的。

我使用点符号过滤嵌入式文档的工作失败,并将所有子文档带回。

有没有更好的方式让MongoDB为我过滤这些问题,还是应该让我自己去关系关联? (拉回所有嵌入式文档并且手动过滤将长期过于紧张)

回答

22

目前没有办法按照您描述的方式过滤嵌入式文档。使用点符号可以匹配嵌入式文档,但是整个文档,父文档和全部文档仍将返回。也可以选择哪些字段将被返回,但这也不能真正帮助您的情况。

我们有一个“虚拟集合”的例子,它将实现所需的功能;随意就可以投票:

http://jira.mongodb.org/browse/SERVER-142

在此期间,你应该把意见作为自己的收藏。一般来说,如果您需要自己处理给定的数据集,请将其作为集合。如果更好地将其作为其他设置的一部分,最好嵌入。

+0

谢谢kb - 已经与收集在一起,似乎到目前为止工作还行;只需要对它进行压力测试。 – kez 2010-01-26 16:08:14

+0

很酷。它应该仍然是有效的。 – 2010-01-26 18:35:02

+13

对于这个非常需要的要求,“虚拟馆藏”不是一个很大的矫枉过正吗?我只是好奇 - 是否只能返回一个没有开发的特定嵌入式文档,因为它不需要,或者因为它很复杂? – idophir 2011-11-16 21:57:02