Mongoose: Utiliser lean pour économiser ?

Créé le 3 oct. 2013  ·  16Commentaires  ·  Source: Automattic/mongoose

Je voudrais utiliser l'option Lean pour enregistrer.
Le rappel de save renvoie également un document mangouste et non un objet JS que je souhaite modifier à l'aide d'un appel de type maigre.

L'utilisation de Lean pour les requêtes et de toObject dans les fonctions de rappel des sauvegardes me semble être une confusion.

Des idées?

Commentaire le plus utile

@imrefazekas , Save, Update, Create et Remove ne sont pas des "requêtes", elles ne prennent donc pas la directive .lean() telle quelle.
Vous pouvez utiliser la méthode .toObject() sur l'objet renvoyé pour l'obtenir sans le schéma :

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

Tous les 16 commentaires

Si vous ne voulez pas utiliser lean, alors votre meilleur pari est de former un nouvel objet à partir de l'objet Mongoose retourné

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

Peut-être que mon message n'était pas clair, désolé.
J'aimerais utiliser le lean mais aussi sur les opérations de sauvegarde.
Les rappels des fonctions de sauvegarde telles que "save" ou "update" renvoient avec l'objet de schéma et je ne peux pas utiliser lean pour avoir un objet JS pur.
C'est mon problème. J'aimerais également utiliser lean pour enregistrer et mettre à jour.

@imrefazekas , Save, Update, Create et Remove ne sont pas des "requêtes", elles ne prennent donc pas la directive .lean() telle quelle.
Vous pouvez utiliser la méthode .toObject() sur l'objet renvoyé pour l'obtenir sans le schéma :

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 fredonne... save() devrait avoir une option maigre ?

Comment imagineriez-vous que save() et lean travaillent ensemble ? AFAIK qui n'a pas de sens.

ummm, ça fait quelques jours mais actuellement c'est comme ça

user.save(function(err,user){

      //user is full-fledged etc
});

avec l'option Lean, ce serait/pourrait être

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

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

n'est-ce pas ?

@ORESoftware non , car le 2ème paramètre dans le rappel à enregistrer est exactement le même document. Mongoose ne demande pas à la base de données le nouveau document mis à jour. Par exemple,

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

oh ok j'ai compris :) mon mauvais

pour mémoire, la solution apportée ci-dessus par @refack fonctionne toujours à merveille en 2017

@peterpeterparker Je ne suis pas d'accord et je pense que c'est toujours un problème pour les utilisateurs qui souhaitent que les données soient renvoyées à partir de toutes les opérations de base de données au lieu des instances de Mongoose.

@alex-dixon Je faisais juste remarquer que la solution de @refack pour l'opération save est toujours valide et fonctionnelle en 2017, ni plus ni moins ;)

@peterpeterparker Vous avez raison. Désolé. Je n'aurais pas dû diriger ça vers toi.

@alex-dixon pas de soucis

devrions-nous utiliser lean() avec Model.create() ?

Jamais car vous ne pouvez pas utiliser lean() avec Model.create() :p

j'ai compris :)

Cette page vous a été utile?
0 / 5 - 0 notes