首页 > 解决方案 > mongodb $or 查询的哪些分支满足在返回的集合中包含文档?

问题描述

假设我有一个 mongo $or 查询,例如{ $or: [query1, query2, ... queryN] },其中每个嵌入式查询都可能很复杂。在执行查询时,会返回一组匹配一个或多个嵌入查询的文档。我想知道返回集中的每个文档都满足了 N 个嵌入式查询中的哪一个,可能是通过添加我指定的新字段,例如。marks,到每个返回的文档中,该文档将包含满足任何查询的索引列表。我需要这些信息来表明每个文档在我的应用程序界面中是如何被识别的。

我意识到我可以在返回集合后检查它并确定满足的查询,但是这些查询可能非常复杂且检查起来很昂贵——此外,在进行搜索时,这必须已经在 mongo 内部完成。

我还意识到我可以按顺序运行 N 个查询中的每一个,然后将结果标记并合并到一个不断增长的集合中,但我想通过运行单个查询而不是 N 个查询来节省开销。

而且我意识到一旦为每个文档找到第一个令人满意的查询,Mongo 肯定会停止,所以我可能无法获得完整的集合,但我至少希望确保查询按特定顺序执行,比如说 1...N,每个文档都可以用它的第一个令人满意的索引来标记。

有谁知道Mongo中是否有可以做到这一点的机制?

标签: mongodbmongodb-query

解决方案


您可以使用聚合。

用于$addFields为每个查询添加一个新字段。

您可以$match先添加字段,然后添加字段,也可以先添加字段,然后再添加字段。


推荐阅读