2015-10-14 66 views
0

我正在開發中Express應用程序中使用Mongo,在我所到query,無論是在collection或不document退出。我這樣做:蒙戈與快遞:什麼是找到返回

var dept= req.body.dept; 
var name= req.body.name; 
mongoose.model('User').find({'dept': dept, 'name': name}, function(err, user){ 
     if(err){ 
      res.render('user/test1'); 
     }else{ 
      res.redirect('/'); 
     } 
    }); 

我想要做的是檢查是否是document退出在collection並在真實condition,我想重定向到另一頁以其他方式使當前頁面。但是,當我通過錯誤的input,即使它然後去else部分和redirects它。

回答

1

那麼你實際使用的是mongoose,所以之間其實什麼是這個特定版本(abtraction)什麼基礎驅動程序本身返回返回的區別。

mongoose的情況下,返回的結果是array結果或null值(如果沒有找到)。如果您正在尋找單數匹配,那麼您可能真的想要findOne()而不是結果數組。

但當然的情況下將是一個null結果與兩個函數,如果相對於一個err結果不是null,這當然是對特定的數據庫連接錯誤,而不是簡單地說什麼也沒有找到沒有回來。

另一方面,基礎驅動程序將返回一個"Cursor"(或可選地視爲承諾),它可以通過.toArray()方法迭代或轉換爲像貓鼬那樣的數組。基礎驅動程序的.findOne()方法類似地返回結果或條件不匹配的文檔null

mongoose.model('User').findOne({'dept': dept, 'name': name}, function(err, user){ 
    if(err){ 
     // if an error was actually returned 
    } else if (!user) { 
     // Nothing matched, in REST you would 404 
    } else { 
     // this is okay 
    } 
}); 

總之,如果你想測試,你居然發現的東西,然後看看在不在null,以確定它相匹配的值user值。如果是null則沒有任何匹配。

所以不匹配不是一個「錯誤」,而「錯誤」實際上是一個不同的東西。

+0

很好解釋,謝謝.. findOne神奇地工作! – Saani