【发布时间】:2016-12-12 10:13:52
【问题描述】:
我有大约 10 亿个文档的庞大集合,其中很少有文档(少于 200 个)包含某些字段“rare_field”。
我怎样才能尽快找到包含该字段的所有文档?
如果我只是这样做:
collection.find({ "rare_field" : { $exists : true }})
超时。 这可能需要几天时间才能完成,所以我不确定即使通过查询标志防止超时也会有所帮助,但也许我错了。
我也可以编写一个脚本来检查所有文档,但这会很慢,因为它需要通过网络将所有 10 亿个文档传递到我的服务器,我想要一些不需要任何数据传递的解决方案电线,而且会很快。
注意:这是一个sharded 集合。
我将发布我当前的解决方案作为答案,但我不确定它是否 100% 正确,而且速度没有我想要的那么快。
【问题讨论】:
-
将此
rare-field放入您的分片查询中!正因为如此,mongo 也会索引这个字段!所以它会很快! -
谢谢。这是一次性的事情,所以我在这里并不需要索引。当数据库为空时,这可能是一个很好的解决方案,但是现在索引这个字段会花费很多时间,就像手动浏览所有文档一样(我认为)
-
你说的时间消耗是对的!所以这完全取决于你的应用程序!另一种方法是将结果保存在缓存中!将结果存储在新集合或 redis 或 smtn 中!
-
创建sparse index?
标签: mongodb mongodb-query query-performance