当前位置: 首页 > 知识库问答 >
问题:

MongoDB查询特定字段未包含在值列表中的文档的最有效方法

於和志
2023-03-14

我有一个关于过滤特定字段不在值列表中的文档的问题。例如,文档只包含唯一且已索引的“_id”字段。现在我有一个“_id”列表,并想找出“_id”不在“_id”列表中的所有文档。

我可以通过使用$in运算符来实现,例如:

db.mycollection.find({_id:{$in:["id1","id2"]}},{_id:1})

返回列表中ID的所有文档,然后与给定列表进行比较。这种方式的性能对于数千个文档来说还不够好。我想知道是否有更好的方法来做到这一点。例如,是否可以构造一个查询,只返回ID不在列表中的文档,以减少网络传输时间?

谢谢

共有1个答案

楮法
2023-03-14

$nin是您正在寻找的

db.mycollection.find({ "_id": { "$nin": [ "id1","id2" ]}}, { "_id": 1 })
 类似资料:
  • 我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如,下面是一个示例集合: 我希望找到docs块中没有包含至少一个foo=1的记录的文档的每个记录。在上面的示例中,应该只返回第二个文档。 我还查看了$nin运算符,但示例只显示数组包含基元值列表时的情况,而不是附加文档。当我尝试使用类似于下面的东西来实现这一点时,它查找的是确切的文档,而不仅仅是我想要的foo字段。 有没有用基本运算符来

  • 我有两个Firestore集合,和。下面是每个文件中的典型文档所包含内容的简化示例。 此设置使查询任何给定用户按时间顺序排序的帖子变得非常容易,只需查找其字段等于该用户的文档引用的文档。 我在iOS/Swift中通过以下方法实现了这一点,尽管我们正在为iOS、Android和Web构建这个应用程序。 是否可以构建我正在描述的查询,或者我将不得不采用这种不太理想的方法?这似乎是一个相当常见的查询用例

  • 我必须将此添加到我执行的每个搜索查询中。我有一个大约20,000个文档的索引,我真的不想重建它,因为我在上一个版本中让我的用户重建了他们的索引。注意:这是在android设备上,所以需要很长的时间和大量的电池来重新索引他们的所有文档。 谢谢你的帮助。

  • 我在MongoDB有一些收藏,例如下面的一个 我想找到“\u id”或任何其他字段的最小值和最大值。我正在使用“MongoDB指南针”。如何在MongoDB Compass中编写查询,以获得特定列的最小值和最大值

  • 问题内容: 我有以下模型: 我正在寻找一个查询,该查询检索不属于某个特定组的所有人员(即,人员的组数组不包含指定组的ID)。 我在考虑这样的事情,但是我不确定它是正确的: 问题答案: 基本的尝试没什么错,但是这里唯一的澄清可能是普遍的误解,即您需要像 或 查询数组时这样的运算符。 另外,您真的需要在这里做一个基本的不等式匹配 : “数组”运算符不用于“数组目标”,而是用于提供条件的“列表”以方便的

  • 问题内容: 考虑到与类似值的字符串列,什么是查询所有的最佳方法 ,其中包括给定数量的记录 (例如)? 我脑海中的解决方案是: 但由于前导,因此AFAIK该查询无法在列上使用索引。 必须有更好的东西。它是什么? 使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。 问题答案: 在PostgreSQL 9.1中,您可以利用该模块并用它构建一个GIN索引。 您的表达式即使没有左锚也可以使用