我创建一个上限集合(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.
Tailable queries never use indexes.??
===================更新2 抱歉,我忘记了mongodb日志警告是关于test.crawl02的,我已经改变了。
答案 0 :(得分:1)
错误表明test.crawl01上没有索引。这是对的。当你这样做
db.system.indexes.find()
你有一个关于test.crawl02上_id字段的索引而不是test.crawl01
在test.crawl01上创建一个索引。