2014-01-15 46 views
1

使用以下代碼,將回顯所有10個現有記錄。但我期待observeChanges只打印出新的記錄。使用Cursor.observeChanges時禁止初始化

這怎麼辦?爲什麼它會返回查詢中的所有現有文檔?

added插入新文檔時也不會執行。除非我們刪除limit運營商。

server.js

var query = myCollection.find({}, {limit: 10}) 

query.observeChanges({ 
    _suppress_initial: true, 

    added: function (id, fields) { 
     console.log('doc added') 
    } 
}) 

使用流星0.7.0.1。

回答

4

相位在oplog拖尾中的新流星版本(0.7及更高版本)不再支持_suppress_initial。簡要提及change here,它可能會以某種形式回來。

更新:如果你想登錄到控制檯,每當新的東西都會被放入「MyCollection的」,那麼這會工作:

var query = myCollection.find({}); //find everything in collection currently 
var init = true; 

query.observeChanges({ 

    added: function (id, fields) { 
     if (! init) 
     console.log('doc added'); 
    } 
}); 

init = false; 

有了限制,如果集合有超過10個文件開始,將光標剛繼續查找相同的10個原始文檔,以便插入該光標時集合的增長不需要超過10個文檔。

+1

對我們如何才能解決方法手動缺乏'_suppress_initial'的任何想法? – Nyxynyx

+0

這可能是一個有趣的問題。逐個計數的示例在觀察之前跟蹤一個變量設置爲true的初始化,然後設置爲false。它表示「在最初添加的回調已經運行後,只觀察回報。」所以複製該方法可能適用於很多情況。 – user728291

1

避免爲初始加載多次激發附加函數的一種好方法是去除它。
以下劃線:

query.observeChanges({ 

    added: _.debounce(function(id, fields) { 
    // Do something 
    }, 100) 

}); 
+0

如果後兩個文檔在100ms內添加,會怎麼樣? –