2014-09-15 3 views

Répondre

2

Je vois deux façons simples possible de le faire:

Alternative # 1

Ajouter un dict statique avec les options que vous souhaitez appliquer à votre schéma Mongoose spécifique:

FooSchema.statics.options = { 
    ... 
}; 

maintenant, lorsque vous interrogez que vous devez faire:

Foo.find({}, null, Foo.options, function(err, foos) { 
    ... 
}); 

Alternative # 2

Mettre en oeuvre une enveloppe à la méthode de recherche qui utilise toujours vos options spécifiques:

FooSchema.statics.findWithOptions = function(query, next) { 
    var options = { ... }; 
    this.find(query, null, options, next); 
}; 

Et utiliser cette méthode comme ceci:

Foo.findWithOptions({}, function(err, foos) { 
    ... 
}) 

réutilisabilité

Pour rendre ces méthodes wrapper plus réutilisables, y ous pouvez faire un dict avec tous vos emballages:

var withOptionsWrappers = { 
    findWithOptions: function(query, next) { 
     this.find(query, null, this.options, next); 
    }, 
    findByIdWithOptions: ... 
    findOneWithOptions: ... 
    ... 
}; 

Puisque nous faisons référence à this il n'y aura pas de problème réutilisant cela. Et ont maintenant il être appliqué à tous vos schémas ainsi que votre schéma options spécifiques:

FooSchema.statics = withOptionsWrappers; 
FooSchema.statics.options = { 
    ... 
}; 
BarSchema.statics = withOptionsWrappers; 
BarSchema.statics.options = { 
    ... 
}; 
+0

Merci pour la réponse, mais en fait je veux ajouter cette option à toutes les requêtes (trouver, findById, mise à jour, supprimer ...) donc je besoin de créer wrapper pour chaque requête pour chaque modèle! – eyadof

+0

@eyadof a ajouté une section dans ma réponse qui suggère comment vous pouvez le réutiliser. –

1

j'ai pu le faire pour mes doux éléments supprimés. Je ne l'ai pas encore testé intensivement.

function findNotDeletedMiddleware(next) { 
    this.where('deleted').equals(false); 
    next(); 
} 

MySchema.pre('find', findNotDeletedMiddleware); 
MySchema.pre('findOne', findNotDeletedMiddleware); 
MySchema.pre('findOneAndUpdate', findNotDeletedMiddleware); 
MySchema.pre('count', findNotDeletedMiddleware); 
Questions connexes