MongoDB 游标不一致的行为



我无法理解mongo中的这种行为。删除第一个文档它反映在光标中,随后它不是。

use movies;
> db.imdb.insert({name:"Titanic", "genre":"drama", rating:"9.5"});
> db.imdb.insert({name:"Die Hard 1", "genre":"action", rating:"9"});
> db.imdb.insert({name:"Die Hard 2", "genre":"action", rating:"9"});
> db.imdb.insert({name:"Die Hard 3", "genre":"action", rating:"9"});
> db.imdb.insert({name:"Die Hard 4", "genre":"action", rating:"4"});
> cursor=db.imdb.find();null;
cursor.count();
5
> db.imdb.deleteOne({name:"Titanic"});
{ "acknowledged" : true, "deletedCount" : 1 }
> cursor.count();
4
> cursor.next();
{
"_id" : ObjectId("5b7eb82354a5c4cc4848a116"),
"name" : "Die Hard 1",
"genre" : "action",
"rating" : "9"
}
> db.imdb.deleteOne({name:"Die Hard 2"});
{ "acknowledged" : true, "deletedCount" : 1 }
> cursor.count();
3
> cursor.next();
{
"_id" : ObjectId("5b7eb82354a5c4cc4848a117"),
"name" : "Die Hard 2",
"genre" : "action",
"rating" : "9"
}
> cursor.next();
{
"_id" : ObjectId("5b7eb82354a5c4cc4848a118"),
"name" : "Die Hard 3",
"genre" : "action",
"rating" : "9"
}
> cursor.next();
{
"_id" : ObjectId("5b7eb82554a5c4cc4848a119"),
"name" : "Die Hard 4",
"genre" : "action",
"rating" : "4"
}
> cursor.next();
2018-08-23T19:15:28.173+0530 E QUERY    [js] Error: error hasNext: false :
DBQuery.prototype.next@src/mongo/shell/query.js:304:1
@(shell):1:1
>

不明白为什么从光标获取Die Hard 2

附言 我正在 Ubuntu 16.04 LTS 上使用独立安装的 mongodb。

MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0

第一次调用cursor.next()时,将从服务器获取第一"批"文档。当时,"虎胆龙威2"仍然存在,因此它包含在批处理中,该批处理现在存储在光标内的内存中。然后删除该文档,但它仍在光标中,如您所见,后续对cursor.next()的调用将返回它。