2015-11-04 98 views
0

我在試圖成功查詢Mongo的牆上敲打我的頭。如何在Mongo中查詢?

此代碼:

async.waterfall([ 
     function(callback){ 
      cursor = db.collection(collection).findOne(query) 
      callback(null); 
     }, 
     function(callback){ 
      console.log("Result is:" + cursor); 
      console.log(JSON.stringify(cursor)); 
      callback(null); 
     } 
    ]); 

產生以下輸出:

result is:[object Object] 
{} 

爲什麼?有一份文件應該在收集中找到。

作爲後續問題,我怎麼能看到什麼

[object Object] 

是什麼?

+0

嘗試'「的結果是:」 cursor'而不將正常登錄。您應該將查詢結果傳遞給回調函數而不是光標。即在回調函數'.findOne'中使用'callback'。這是本地MongoDB驅動程序嗎?什麼版本? –

+0

我正在使用Mongo v 3.0。請您用不同的詞語來解釋/說出:「您應該將查詢結果傳遞給回調函數而不是光標,即在回調函數中使用.findOne回調函數」。謝謝! (另外:「結果是:」,光標更改只是打印{}。) – Dirk

回答

4

基本上你應該等待查詢完成,然後調用回調,並期望任何結果:

 async.waterfall([ 
      function(callback){ 
       db.collection(collection).findOne(query, function(err, result) { 
        callback(err, result); // if there is no err, it will be null 
       }); 
       // the above can be simplified to just          
       // db.collection(collection).findOne(query, callback); 
       // since findOne callback and current function callback have the same arguments 
      }, 
      function(result, callback) { 
       // use comma here to automatically doing JSON.stringiry(result) 
       console.log("Result is:", result); 
       callback(); 
      } 
     ], function(err) { 
      // here is your final callback where you know that async.waterfall 
      // is finished (with or without error) 
     });