Mongoose: снятые документы
Как проверить, действительно ли удаляемый метод модели Mongoose удалил что-то?
MyModel.remove({_id: myId}, function(err, entry) {
if(entry == null) next(new Error("ID was not found.")); // this doesn't work
}
Можно ли проверить, сколько документов было удалено?
В Mongo-Documentation kristina1 напишите в комментарии:
Если вы вызываете db.runCommand({getLastError: 1}) после удаления, а в поле "n" указывается, сколько документов было удалено.
Но я не знаю, как это сделать с Mongoose.
Ответы
Ответ 1
Mongoose < 4, MongoDB < 3
Второй параметр обратного вызова remove
- это номер, содержащий количество удаленных документов.
MyModel.remove({_id: myId}, function(err, numberRemoved) {
if(numberRemoved === 0) next(new Error("ID was not found."));
}
Mongoose 4.x, MongoDB 3.x
Второй параметр, переданный в обратный вызов remove
, теперь представляет собой объект с полем result.n
, указывающим количество удаленных документов:
MyModel.remove({_id: myId}, function(err, obj) {
if(obj.result.n === 0) next(new Error("ID was not found."));
}
Ответ 2
Я пробовал это с последней версией мангуста, и это не сработало. Поскольку второй параметр возвращается как результат операции, а не просто счет. Используемый ниже, он работал:
Model.remove({
myId: req.myId
}, function(err, removeResult) {
if (err) {
console.log(err);
}
if (removeResult.result.n == 0) {
console.log("Record not found");
}
Console.log("Deleted successfully.");
});