在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
答案 0 :(得分:1)
游标的大小以字节为单位返回其大小。您应该感兴趣的是为了防止所有扫描是文档的数量。使用此代码段:
collection.FindAll().Count();
答案 1 :(得分:1)
我犯了一个错误 - 在mongoDb中都是区分大小写的。
我在yyy
而不是YYY
添加了索引。
即使表中没有任何名称为yyy并且索引创建成功,也没有警告消息:(。
我在正确的列名上重新创建了一个索引。现在一切都很快。