私のコード
方法 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 秒に挿入した行を出力しません。
質問
snapshot
メソッドの ' ' オプションがfind
メソッド 1 で機能しない理由- 方法2 を指定して
{snapshot: true}
も{snapshot: false}
、手動で挿入したドキュメントは印刷されません。 - カーソルの動作を説明しているサイトを教えてください。
以下のように @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)