Mongoose: ¿Utiliza lean para ahorrar?

Creado en 3 oct. 2013  ·  16Comentarios  ·  Fuente: Automattic/mongoose

Me gustaría usar la opción lean como para guardar.
La devolución de llamada de save también devuelve un documento de mangosta y no un objeto JS que quiero cambiar usando una llamada lean-like.

El uso de lean para consultas y toObject en las funciones de devolución de llamada de los guardados me parece una confusión.

¿Algunas ideas?

Comentario más útil

@imrefazekas , Save, Update, Create y Remove no son "consultas", por lo que no toman la directiva .lean() tal cual.
Puede usar el método .toObject() en el objeto devuelto para obtenerlo sin el 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 comentarios

Si no desea utilizar lean, lo mejor que puede hacer es formar un nuevo objeto a partir del objeto Mongoose devuelto

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

Quizás mi publicación no fue clara, lo siento.
Me gustaría usar el método lean pero también en operaciones de ahorro.
Las devoluciones de llamada de las funciones de guardado como "guardar" o "actualizar" regresan con el objeto de esquema y no puedo usar lean para tener un objeto JS puro.
Este es mi problema. También me gustaría usar lean para guardar y actualizar.

@imrefazekas , Save, Update, Create y Remove no son "consultas", por lo que no toman la directiva .lean() tal cual.
Puede usar el método .toObject() en el objeto devuelto para obtenerlo sin el 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 tararea ... save() Debería tener una opción Lean?

¿Cómo imagina save () y lean trabajando juntos? AFAIK eso no tiene sentido.

ummm, han pasado unos días pero actualmente es así

user.save(function(err,user){

      //user is full-fledged etc
});

con la opción lean, sería / podría ser

user.save({
  lean:true
},function(err,user){

      //user is *not* full-fledged etc
});

¿no es así?

@ORESoftware no , porque el segundo parámetro en la devolución de llamada para guardar es exactamente el mismo documento. Mongoose no solicita a la base de datos el documento recién actualizado. Por ejemplo,

user.save(function(err, _user){
  user === _user; // true
});

oh ok lo tengo :) mi mal

para el registro, la solución proporcionada anteriormente por @refack todavía funciona como un encanto en 2017

@peterpeterparker No estoy de acuerdo y creo que esto sigue siendo un problema para los usuarios que desean que se devuelvan datos de todas las operaciones de la base de datos en lugar de las instancias de Mongoose.

@ alex-dixon Solo estaba señalando que la solución de @refack para la save sigue siendo válida y funcional en 2017, nada más, nada menos;)

@peterpeterparker Tienes razón. Perdón. No debería haber dirigido eso hacia ti.

@ alex-dixon no te preocupes

¿Deberíamos usar lean() con Model.create() ?

Nunca porque no puedes usar lean() con Model.create() : p

Entendido :)

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

adamreisnz picture adamreisnz  ·  3Comentarios

gustavomanolo picture gustavomanolo  ·  3Comentarios

p3x-robot picture p3x-robot  ·  3Comentarios

simonxca picture simonxca  ·  3Comentarios

ghost picture ghost  ·  3Comentarios