2012-11-19 3 views
7

Disons que j'ai un certain schéma qui a un champ virtuel comme celui-ciTri par champ virtuel dans MongoDB (mangouste)

var schema = new mongoose.Schema(
{ 
    name: { type: String } 
}, 
{ 
    toObject: { virtuals: true }, 
    toJSON: { virtuals: true } 
}); 

schema.virtual("name_length").get(function(){ 
    return this.name.length; 
}); 

Dans une requête est-il possible de trier les résultats par le champ virtuel? Quelque chose comme

schema.find().sort("name_length").limit(5).exec(function(docs){ ... }); 

Lorsque je tente cela, les résultats sont simples non triés ...

Répondre

9

Vous ne pourrez trier par un champ virtuel parce qu'ils ne sont pas stockés dans la base de données.

Les attributs virtuels sont des attributs qui peuvent se présenter autour de mais qui ne sont pas conservés dans mongodb.

http://mongoosejs.com/docs/2.7.x/docs/virtuals.html

+0

Je sais quels attributs virtuels sont et qu'ils ne sont pas stockés dans db. Je me promenais peut-être il pourrait y avoir un plugin ou une méthode spéciale qui appelle tous les getters pour les attributs virtuels, puis trie docs. Je suppose qu'il n'y a pas une telle chose. – ArVan

+0

Donc, je suppose que ma solution devrait être de trier et de limiter en javascript après avoir obtenu des résultats? – ArVan

+0

et je suppose que vous ne pouvez pas utiliser les virtuals en condition de recherche? – ArVan

Questions connexes