2015-07-17 2 views
1

мангуст документов наглядно продемонстрировали, как обновить модель данной модели класса, например так:Mongoose обновление индивидуальная модель

Tank.update({ _id: id }, { $set: { size: 'large' }}, callback); 

Если нам нужен документ, возвращаемую в нашем приложении есть другое, часто лучше, вариант :

Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, function (err, tank) { 
    if (err) return handleError(err); 
    res.send(tank); 
}); 

, но я не могу найти синтаксис для обновления модели, которая у меня уже есть в руках, это было бы что-то вроде:

tank.update({ $set: { size: 'large' }}, callback); 

. Это есть?

ответ

3

Следующий пример из вашего вопроса поддерживается:

tank.update({ $set: { size: 'large' }}, callback); 

документация для этого аромата update является here, как это часть базы Document вместо самой Model.

Однако имейте в виду, что объект tank, который вы вызываете его, не будет обновлен, а только фактический документ в базе данных.

+0

Интересно, почему mongoose/mongo не работает, когда вы не ставите оператор $ set. Если я передаю объект staight в качестве первого аргумента, он не возвращает ошибку и, вероятно, должен –

+0

@AlexMills. Это фактически определено поведение. См. Примечание в [документах] (http://mongoosejs.com/docs/api.html#model_Model.update) для 'update'. – JohnnyHK

+0

ok посмотрит спасибо –

3

Это просто .save():

tank.size = "large" 
tank.save(callback) 

где ваш обратный вызов имеет три аргумента: error, savedTank, count:

Here it is in the docs.

Это может быть несколько более сложным с массивами, но есть множество вопросов, касающихся их.

+0

спасибо, вас также может заинтересовать то, что @JohnnyHK просто опубликовано как комментарий, а именно этот http://mongoosejs.com/docs/api.html#document_Document-update –

+2

@AlexMills yep, просто имейте в виду, что '. update() 'не передает обновленный документ для обратного вызова тем же способом, что' findByIdAndUpdate() 'делает. – cdbajorin

Смежные вопросы