1

我有一个 MongoDB 集合,其中包含各种数据。(约百万)

这些数据有一个类似的数据结构{k: {a:1,b:2,c:{},...}},我不知道它到底是什么。

现在我想对这个集合进行计数,k通过使用返回集合中不为空的总元素,{k:{$exists:true}}但结果非常慢......

然后我添加一个索引k并尝试通过 : 进行查询,{k:{$gt:{}}但这并没有返回正确的结果。

那么,现在如何依靠收藏来做到这一点呢?

请注意,我不知道k.

4

3 回答 3

1

如果您使用的是版本 2 之前的版本,$exists则无法使用索引。看到这个答案:https ://stackoverflow.com/a/7503114/131809

因此,请尝试升级您的 MongoDB 版本

文档

在 v2.0 之前,$exists 不能使用索引。其他字段的索引仍在使用。
$exists 即使使用索引也不是很有效,尤其是。使用 {$exists:true} 因为它必须有效地扫描所有索引值。

第二部分也许是重要的一点。

听起来sparse索引可能是这里的关键......

于 2012-12-14T12:45:55.303 回答
0

尝试使用$ne : null

因此,根据您的代码示例:

{k:{$ne : null}}
于 2012-12-14T12:18:23.833 回答
0
db.collection.count({k:{$ne:null}})

顺便说一下在 k 上使用稀疏索引。

db.collection.ensureIndex({k:1}, {sparse: true});
于 2012-12-14T12:42:02.650 回答