没有_id索引的MongoDB _id查询上限集合,性能会很差集合

时间:2012-03-02 03:57:51

标签: c# mongodb

我创建一个上限集合(crawl02)并为此上限创建一个索引。

> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.crawl02", "name" : "_id_" }

当我运行应用程序并查询上限集合时,MongoDB Log总是输出以下日志:

[conn2] warning: _id query on capped collection without an _id index, performance will be poor collection: test.crawl02

我的代码语句来查询上限集合(c#)

 var cursor = this.QueueCollection    //crawl02
           .Find(Query.GT("_id", this._lastId))
           .SetFlags(QueryFlags.AwaitData |QueryFlags.TailableCursor 
                    | QueryFlags.NoCursorTimeout)
           .SetSortOrder(SortBy.Ascending("$natural"));
 return (MongoCursorEnumerator<QueueMessage<T>>)cursor.GetEnumerator();

读取有关游标变量的消息:

while(true){
   if (this._cursor.MoveNext())
      return this._currsor.Current;
   else
      return null
}

我不明白为什么mongodb让我crawl02没有索引。

==================================== 通过更新

好的,我在MongoDB office website找到了一篇关于Tailable游标的文章,消息是:

Tailable cursors are only allowed on capped collections and can only return objects in natural order. Tailable queries never use indexes.

那是因为mongodb日志警告? Tailable queries never use indexes.??

===================更新2 抱歉,我忘记了mongodb日志警告是关于test.crawl02的,我已经改变了。

1 个答案:

答案 0 :(得分:1)

错误表明test.crawl01上没有索引。这是对的。当你这样做 db.system.indexes.find() 你有一个关于test.crawl02上_id字段的索引而不是test.crawl01 在test.crawl01上创建一个索引。