Eu gostaria de usar a opção enxuta para salvar.
O retorno de chamada de save retorna também um documento mongoose e não um objeto JS que desejo alterar usando uma chamada do tipo lean.
Usar o lean para consultas e toObject nas funções de callback dos salvamentos parece uma confusão para mim.
Alguma ideia?
Se você não quiser usar o lean, então sua melhor aposta é formar um novo objeto a partir do objeto Mongoose retornado
Person.findOne({
_id: req.user.id
}, function(err, result) {
if (err)
return next(err);
return (200, {
id: result._id,
spouse: result.spouse,
children: result.children
});
});
Talvez minha postagem não tenha sido clara, desculpe.
Eu gostaria de usar o lean, mas também sobre as operações de economia.
Os retornos de chamada das funções de salvamento como "salvar" ou "atualizar" retornam com o objeto de esquema e não posso usar o lean para ter um objeto JS puro.
Esse é meu problema. Eu gostaria de usar o lean para salvar e atualizar também.
@imrefazekas , Salvar, Atualizar, Criar e Remover não são "consultas", portanto, não aceitam a diretiva .lean()
como está.
Você pode usar o método .toObject()
no objeto retornado para obtê-lo sem o esquema:
p.save(function (err, returned) {
var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
assert.equal(leanObject.schema, null);
});
hummity hums ... save()
deveria ter uma opção enxuta?
Como você imaginaria save () e lean trabalhando juntos? AFAIK isso não faz sentido.
ummm, já se passaram alguns dias, mas atualmente é assim
user.save(function(err,user){
//user is full-fledged etc
});
com a opção enxuta, seria / poderia ser
user.save({
lean:true
},function(err,user){
//user is *not* full-fledged etc
});
não está certo?
@ORESoftware não, porque o segundo parâmetro no callback para salvar é exatamente o mesmo documento. O Mongoose não pede ao banco de dados o documento recém-atualizado. Por exemplo,
user.save(function(err, _user){
user === _user; // true
});
oh ok entendi :) meu mal
para constar, a solução fornecida acima por @refack ainda funcionará como um encanto em 2017
@peterpeterparker Eu discordo e acho que isso ainda é um problema para os usuários que desejam que os dados sejam retornados de todas as operações de banco de dados em vez de instâncias do Mongoose.
@ alex-dixon Eu estava apenas apontando que a solução do @refack para a save
ainda é válida e funcional em 2017, nada mais, nada menos;)
@peterpeterparker Você está certo. Desculpa. Não deveria ter direcionado isso para você.
@ alex-dixon não se preocupe
devemos usar lean()
com Model.create()
?
Nunca porque você não pode usar lean()
com Model.create()
: p
entendi :)
Comentários muito úteis
@imrefazekas , Salvar, Atualizar, Criar e Remover não são "consultas", portanto, não aceitam a diretiva
.lean()
como está.Você pode usar o método
.toObject()
no objeto retornado para obtê-lo sem o esquema: