【问题标题】:Can I select an array from every document in mongodb?我可以从 mongodb 中的每个文档中选择一个数组吗?
【发布时间】:2017-07-06 15:53:27
【问题描述】:

我在 mongodb 中有一组 blogPost 文档。每篇博文都有一个 comments 数组,其中包含评论文档。我是否可以查询 mongodb 并取回所有 cmets 的列表合并到一个列表中?

我想从每篇博文中构建所有 cmets 的单一投影。

【问题讨论】:

标签: mongodb aggregation-framework nosql


【解决方案1】:

您可能需要使用Aggregation Framework 来完成此操作。具体来说,$unwind

例如:

db.blogPost.aggregate(
    { $project: {
        _id : 0 ,
        comments: 1 }
    },
    { $unwind: "$comments" }
);

或者,如果在您的情况下可行,您可以只在应用程序级别而不是数据库级别执行 cmets 的串联,从而使 Mongo 查询成为所有博客文章的简单查询。

【讨论】:

  • 如果您选择聚合,请确保您了解限制,例如结果不能大于 16MB。 docs.mongodb.org/manual/core/aggregation
  • 此外,在返回任何结果之前需要收集所有结果,这可能是性能问题。
  • 关于 16MB 限制的要点。回复:你的另一点,$unwind 真的是这样吗?我以为它只适用于$sort$group
  • 据我所知,结果作为一个 BSON 文档返回(因此限制为 16MB)
  • 我想在数据库级别执行此操作的原因是我正在运行手动查询以查找所有 cmets 并按日期对其进行排序。我不需要在代码中这样做。
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多