2015-10-14 2 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

Хммм Я все искал для ошибок ... снова он отлично работает на локальном хосте, так что, может быть, это может быть с мангустом? Я видел, что раньше была ошибка такого типа, но это было в 2013 году https://github.com/Automattic/mongoose/issues/1649 – maudulus

+1

'.remove()' вызывает 'collection.remove (obj)' где 'obj '- это весь документ, на который вы его вызываете. Таким образом, единственное возможное совпадение само по себе (поскольку оно включает в себя его идентификатор). посмотрите, что он делает [здесь] (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..."); 
});