MongoDb Find()FullScan with Index

时间:2011-08-22 06:45:59

标签: c# mongodb

在mongo db中

> show dbs
admin   (empty)
data    23.9423828125GB
local   (empty)

我有一个带索引的表:

> db.XXX.count();
80089670

C#:

voteCol.EnsureIndex("({ YYY:1 })");

当我使用C#驱动程序进行查询时:

MongoCollection<BsonDocument> voteCol = database.GetCollection<BsonDocument>("XXX");
var query = new QueryDocument("YYY", DataUtils.getItemInPollIdList());
MongoCursor<BsonDocument> cursor =      voteCol.Find(query).SetSortOrder(SortBy.Descending("ZZZ")).SetLimit(10).SetSkip(20);

此部分代码的执行时间接近于0.

然后当我试图获得光标的大小时

cursor.Size();

我超时了。

  

无法从传输连接读取数据:连接   尝试失败,因为关联方没有正确回应   一段时间后,或建立连接失败,因为   连接主机未能响应。

在Mongo日志中

  

星期一8月22日10:08:50 [conn9]查询数据.XXX ntoreturn:1 reslen:36   nscanned:80089670 {YYY:“1482092”} nreturned:0 48935ms

它能是什么?当查询真的执行?为什么我无法得到结果?

编辑1:添加新索引

  

星期一8月22日10:17:38 [conn12]在{({YYY:-1})上建立新索引:1}   for data.XXX

            4000000/80089670        4%
            7866400/80089670        9%
            11403000/80089670       14%
            15000000/80089670       18%
            19000000/80089670       23%
            22988600/80089670       28%
            26454700/80089670       33%
            30000000/80089670       37%
            33438600/80089670       41%
            37000000/80089670       46%
            40810600/80089670       50%
            44132200/80089670       55%
            48000000/80089670       59%
            52000000/80089670       64%
            55618300/80089670       69%
            59000000/80089670       73%
            62170100/80089670       77%
            66000000/80089670       82%
            70000000/80089670       87%
            74000000/80089670       92%
            77874500/80089670       97%

即使使用新索引 - 同样的问题: Mongo shell:

> printjson(db.XXX.findOne({YYY:"1517077"}));

MongoLog

Mon Aug 22 10:33:40 [conn4] query data.XXX ntoreturn:1 reslen:36 nscanned:80089670 { YYY: "1517077" }  nreturned:0 48751ms

2 个答案:

答案 0 :(得分:1)

游标的大小以字节为单位返回其大小。您应该感兴趣的是为了防止所有扫描是文档的数量。使用此代码段:

collection.FindAll().Count();

答案 1 :(得分:1)

我犯了一个错误 - 在mongoDb中都是区分大小写的。

我在yyy而不是YYY添加了索引。

即使表中没有任何名称为yyy并且索引创建成功,也没有警告消息:(。

我在正确的列名上重新创建了一个索引。现在一切都很快。