2015-10-14 47 views
0

以下是使用nodejs,expressjs, mongodb。在現場,它使用mongolab。我正在從前端向服務器發送POST請求,服務器通過從數據庫中刪除匹配記錄的單個來處理請求。服務器的工作(在ExpressJS進行如下:MongoDB/MongoLab刪除請求在本地工作但在生存時刪除數據庫

var removeStuff = req.body.removeStuff; 
var currentId = req.user._id; 
var currentEmail = req.user.email; 

myStuff.findOne({ 
    $and: [ 
     { $or: [{stuff: removeStuff}] }, 
     { $or: [{apid:currentId},{apiemail:currentEmail}] } 
    ] 
}, function (err, currentStuff) { 
    currentStuff.remove(); 
    res.send('Stuff was removed from database...') 
}); 

什麼是真正奇怪的是,這完全適用於當我跑步時它localhost網站但是,當它是活的,請求刪除ALL。記錄來自數據庫

+0

這是不可能的,除非它是貓鼬的錯誤。在其他地方必須有代碼,這是有問題的代碼。您在文檔上調用了'.remove()',這對集合沒有影響。 – cdbajorin

+0

嗯,我一直在尋找各種各樣的bug ......它再次在localhost上運行,所以也許它可能與貓鼬?我發現以前有這樣的錯誤,但它在2013年https://github.com/Automattic/mongoose/issues/1649 – maudulus

+1

'.remove()'調用'collection.remove(obj)'where obj '是你打電話給它的整個文件。所以唯一可能的匹配是它自己(因爲它包含它的id)。看看它的作用[這裏](https://github.com/Automattic/mongoose/blob/master/lib/model.js#L637-L686),並在[這裏](https:/ /github.com/Automattic/mongoose/blob/master/lib/model.js#L585-L609)來解釋它作爲匹配的用途。 (檢查你正在使用的版本) – cdbajorin

回答

0

好吧,我明白了,我不確定原因究竟是爲什麼不起作用,但我發現在this StackOverflow question有人回答了類似的問題,他們所做的是沿着以下幾條線:

var removeStuff = req.body.removeStuff; 
var currentId = req.user._id; 
var currentEmail = req.user.email; 

myStuff.findOneAndRemove({ 
    $and: [ 
     { $or: [{stuff: removeStuff}] }, 
     { $or: [{apid:currentId},{apiemail:currentEmail}] } 
    ] 
}, function (err) { 
    res.status(200).send("it worked..."); 
});