MongoDB Return 过滤器中的指定文档

MongoDB Return specified document in Filters

我有这个文件 它包含名为 reviews

的文档数组

我尝试使用此代码获取 Théo 发布的评论,但它一直返回给我整个文档(包括评论中的子文档),而不是我使用过滤器指定的文档。

Document document = collection.find(Filters.and(Filters.eq("reviews.reviewer_name", "Théo"))).first();

我真的不明白如何只得到这个特定的文件。感谢您的帮助

如果您尝试进行子文档查询并且只检索特定的子文档,则无法使用 mongo 的简单查询来实现。但是,您可以使用聚合管道来实现这一点。

db.collection.aggregate([
  // This is the same as your initial find query, it will limit the top-level docs to only be the ones you are interested in
  { $match: { 'reviewers.reviewer_name': 'Theo' } },

  // You can now unwind the results, which will make all the sub-documents top-level
  { $unwind: '$reviewers' },

  // Re-match to filter the reviewers, this will actually drop the unmatched reviewers
  { $match: { 'reviewers.reviewer_name': 'Theo' } },

  // Now you can use a projection to get the final results you are looking for
  { $project: { reviewer: '$reviewers' } }
])

这将 return 具有 reviewer 属性 的对象数组,每个元素包含一条评论。然后,您可以使用分页阶段 trim 结果:

db.collection.aggregate([
  // ... same stages as above, and then:
  { $limit: 1 },
])

不确定您正在使用的 Java 驱动程序的具体数据结构是什么,但这些是可以解决问题的一般 mongo 查询。

如果您想阅读有关聚合管道的更多信息,我建议您查看 official documentation,它太棒了,我打开了一整天。他们应该有一些 Java 例子。

祝你好运!