我的代码
方法一:
...
var cursor = collection.find({}, {snapshot: true});
//i made sure to insert a new document to the collection before the below timer fires
setTimeout(function(){
cursor.each(function(err, docu){
console.log("cursor items", docu);
})
}, 15000);
方法二:
var cursor = collection.find({}, {snapshot: true});
cur.nextObject(function(err, item) {
console.log("Read the first doc alone", item)
})
//i made sure to insert a new document to the collection before the below timer fires
setTimeout(function(){
cursor.each(function(err, docu){
console.log("cursor items", docu);
})
}, 15000);
对于这两种方法,我启动了应用程序,在接下来的 15 秒内,我手动将一行插入到同一个数据库中。
方法 1 输出已经存在的行和我在那 15 秒内插入的行。
方法 2 立即输出第一行,并且此方法不打印我在那 15 秒内插入的行,无论 {snapshot: true} 或 {snapshot: false}
问题
- 为什么方法的“
snapshot
”选项find
在方法 1 中不起作用 - Giving
{snapshot: true}
or{snapshot: false}
in 方法 2 不会打印我手动插入的文档。 - 请让我知道任何解释游标行为的网站。
按照@Scott Hernandez 进行尝试,如下所示,但新插入的文档出现在快照光标中。
var SimpleSchema = new mongoose.Schema({
name:{type:String}
}, {collection:'simple'});
var SimpleModel = mongoose.model('SimpleModel', SimpleSchema);
//var snapshotQuery = SimpleModel.find({}).setOptions({snapshot:true}); //try method 1
var snapshotQuery = SimpleModel.find({}).snapshot(true); //try method 2
setTimeout(function(){
snapshotQuery.exec(function(err, docs){
if(err){
console.log("ERROR", err);
}else{
console.log("setTimeout", docs);
}
})
},10000)