我有一个 MongoDB 集合,其中包含各种数据。(约百万)
这些数据有一个类似的数据结构{k: {a:1,b:2,c:{},...}}
,我不知道它到底是什么。
现在我想对这个集合进行计数,k
通过使用返回集合中不为空的总元素,{k:{$exists:true}}
但结果非常慢......
然后我添加一个索引k
并尝试通过 : 进行查询,{k:{$gt:{}}
但这并没有返回正确的结果。
那么,现在如何依靠收藏来做到这一点呢?
请注意,我不知道k
.
我有一个 MongoDB 集合,其中包含各种数据。(约百万)
这些数据有一个类似的数据结构{k: {a:1,b:2,c:{},...}}
,我不知道它到底是什么。
现在我想对这个集合进行计数,k
通过使用返回集合中不为空的总元素,{k:{$exists:true}}
但结果非常慢......
然后我添加一个索引k
并尝试通过 : 进行查询,{k:{$gt:{}}
但这并没有返回正确的结果。
那么,现在如何依靠收藏来做到这一点呢?
请注意,我不知道k
.
如果您使用的是版本 2 之前的版本,$exists
则无法使用索引。看到这个答案:https ://stackoverflow.com/a/7503114/131809
因此,请尝试升级您的 MongoDB 版本
从文档:
在 v2.0 之前,$exists 不能使用索引。其他字段的索引仍在使用。
$exists 即使使用索引也不是很有效,尤其是。使用 {$exists:true} 因为它必须有效地扫描所有索引值。
第二部分也许是重要的一点。
听起来sparse
索引可能是这里的关键......
尝试使用$ne : null
因此,根据您的代码示例:
{k:{$ne : null}}
db.collection.count({k:{$ne:null}})
顺便说一下在 k 上使用稀疏索引。
db.collection.ensureIndex({k:1}, {sparse: true});