1

私のコード

方法 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);

方法 2:

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 は最初の行をすぐに出力し、{snapshot: true} または {snapshot: false} に関係なく、このメソッドはその 15 秒に挿入した行を出力しません。

質問

  1. snapshotメソッドの ' ' オプションがfindメソッド 1 で機能しない理由
  2. 方法2 を指定して{snapshot: true}{snapshot: false}、手動で挿入したドキュメントは印刷されません。
  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