2013-10-04 178 views
1

我知道這將是一些我很想念的東西,但會很感激幫助。MongoDB查找返回零結果

這裏是我的測試腳本(node.js的)


var MongoClient = require('mongodb').MongoClient; 

MongoClient.connect('mongodb://localhost:27017/myTestDB', 
    function (err, db) { 
     if (err) 
      debugger; 
     else {    
      db.collection('test', function (err, collection) { 

       collection.save({ name: "danny" }, function() { debugger;}); 

       collection.find(function (err, results) { 
        if(results.items.length == 0){ 
         ///======> always = 0 !!!! WHY?!!!! 
         debugger; 
        } 
       }); 
      }); 

     } 
     db.close(); 
    }); 

隨時與來開始回答問題 「咄!」

+0

有一點要注意的是,調試;在保存回調裏面「collection.save({name:」danny「},function(){debugger;});」從來沒有觸發 –

回答

2

UPDATE:你還需要移動find回調裏面你db.close();來電或您要關閉連接你用它做了。

在你的例子中,results是一個遊標,而不是一個文檔數組,所以你需要調用toArray來迭代遊標並獲取文檔數組。但您還需要將您的find呼叫撥入save回撥。否則,在save完成之前,find正在執行。

所以這樣的事情,而不是:

collection.save({ name: "danny" }, function() { 
    collection.find().toArray(function (err, results) { 
     // results contains the array of docs 

     // Now you can close the connection. 
     db.close(); 
    }); 
}); 
+0

這很有道理強尼。但是正如我在上面的評論中所提到的,保存的回調永遠不會被觸發。也許我有一個問題那裏......但這將解釋第一次不工作,但下一次我運行它的前一次運行的記錄是在表中...我會再次測試並回復給你 –

+0

看到我的更新 - 我也注意到你很快就關閉了你的連接。 – JohnnyHK

+0

你先生...搖滾!就是這樣。在有機會回調之前,我正在關閉連接。我認爲你用石頭打了三隻鳥。我正在重寫和測試,但我認爲這將解決它。 –