1

我的代码

方法一:

...
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}

问题

  1. 为什么方法的“ snapshot”选项find在方法 1 中不起作用
  2. Giving {snapshot: true}or {snapshot: false}in 方法 2 不会打印我手动插入的文档。
  3. 请让我知道任何解释游标行为的网站。

按照@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)
4

1 回答 1

0

格式不正确。您必须使用文档中描述的快照方法。

于 2013-08-12T22:05:05.330 回答