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