我很难理解如何在MongoDB中过滤嵌入的文档,我开始认为我应该使用关系关联,但在文档存储环境中这感觉是错误的.

按照一个典型的博客/ comments 系统,我收集了blogs个,每个blog个有很多comments个. comments 作为嵌入文档存储在博客文档中.

过滤我的blogs个集合非常简单,但为了过滤嵌入在每个blog中的comments个集合,我必须将它们全部加载到内存中(将它们全部检索到Ruby数组中),并循环遍历每个注释,返回符合特定条件的注释.

我使用点符号过滤嵌入文档的努力失败了,并带回了所有子文档.

有没有更好的方法让MongoDB为我过滤这些信息,或者我应该接受关系关联?(从长远来看,撤回所有嵌入的文档和手动过滤将过于密集)

推荐答案

目前还没有办法按照您描述的方式过滤嵌入式文档.使用点符号可以匹配嵌入的文档,但整个文档(父文档和所有文档)仍将返回.也可以 Select 返回哪些字段,但这对您的情况也没有帮助.

我们有一个"虚拟集合" case ,它将实现所需的功能;请随意投票:

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

同时,您可能应该将 comments 视为自己的Collection .一般来说,如果需要单独处理给定的数据集,请将其设置为集合.如果更好地将其作为其他集合的一部分,那么最好嵌入.

Mongodb相关问答推荐

使用mongosh将大型json文件插入到mongo集合中

MongoDB索引使用

MongoDB$unionWith,如何 Select 特定文档

在Mongoose中对嵌套文档设置时间戳,但不对父文档设置时间戳

MongoDB 在一个聚合中包含多个组

mongodb.将文档分组在数组中,对它们进行评分计数和求和并添加新字段

Mongo:查找具有 0 个关联文档的文档,成本更低

解析命令行时出错:unrecognized option --rest

如何使用 Spring Data MongoDB 通过 GridFS ObjectId 获取二进制流

SELECT 字段 AS `anothername` 的 mongodb 等效项

指定字段对于 MongoDB 是transient瞬态的,但对于 RestController 不是

如何在mongo中插入带有日期的文档?

从 LinkedHashMap 转换为 Json 字符串

如何在 mongoDB 中聚合巨大的数组?

MongoDB 查找精确的数组匹配,但顺序无关紧要

MongoDB - 我如何找到另一个集合中的文档未引用的所有文档

Ruby 按键值分组哈希

在 mongodb 中插入当前日期时间

MongoDB 查询:字段不存在或具有特定值

将 FilterDefinition 转换为可以在 mongo shell 中运行的常规 json mongo 查询