Mongoose: Usando o lean para salvar?

Criado em 3 out. 2013  ·  16Comentários  ·  Fonte: Automattic/mongoose

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?

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:

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);
});

Todos 16 comentários

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 :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jeneser picture jeneser  ·  3Comentários

lukasz-zak picture lukasz-zak  ·  3Comentários

varunjayaraman picture varunjayaraman  ·  3Comentários

gustavomanolo picture gustavomanolo  ·  3Comentários

simonxca picture simonxca  ·  3Comentários