【发布时间】:2020-07-22 00:16:20
【问题描述】:
我想用 mongodb 执行这种形式的高效操作:
db.getCollection('x').find({a:{$ne:null}})
我的理解是a 上的索引将不包括缺少字段a 的文档。因此{a:{$ne:null}} 形式的查询需要扫描这些文档(即不能仅仅依靠索引来查找所有匹配的文档)。
我正在考虑一项 mongo 功能请求(如果尚未提交),以允许索引选择性地包含具有缺失值的文档。我想知道:
- 在当前的 mongo 版本中,是否可以以某种方式加速上述查询?请注意,始终为该字段添加一个值是很好的答案,但在我的情况下这是不可能的。
- 这是一个合理的 mongo 功能请求吗?我不太了解索引是如何实现的,但据我所知,这似乎应该是可能的(尽管它并不适用于所有索引 - 仅适用于某些索引,由程序员自行决定)。
我知道这里有很多关于索引和“null”的问题(null 值与缺失值等),但我花了一些时间,找不到这个问题的直接答案.
作为一个真实的例子,我有一个包含大约 8000 万个文档的集合。其中大约 1,000 个文档缺少 a 字段。我希望能够遍历那些缺少a 的文档(以任何顺序)。一种解决方法是确保它们永远不会丢失a,只需将其设置为 -1 或其他特定值。这对我来说似乎有点傻 - 应该有一种方法让 mongo 在后台为我做这件事。
【问题讨论】:
-
您最初的假设不正确。索引可以并且确实涵盖
{$ne:null}的查询 -
同意 - 如果它对任何人都有帮助,我正在考虑这里讨论的 COUNT_SCAN 案例mongodb-user.narkive.com/MKpJkCNh/…(但这是一个单独的问题)
标签: mongodb