2014-04-25 5 views
0

J'ai un schéma de produit et un schéma de catégorie.Comment obtenir un document en fonction de l'ID de document secondaire de ce document

var ProductSchema = new Schema({ 
    categories: [CategorySchema], 
    createdDate: { type: Date, default: Date.now }, 
}); 

var CategorySchema = new Schema({ 
    name: String, 
    createdDate: { type: Date, default: Date.now }, 
}); 

Comment obtenir le produit qui contient une catégorie particulière. Comment écrire cette requête en utilisant mongoose.js?

Répondre

0

présumant que vous avez une définition de modèle pour Product en fonction de la définition ProductSchema alors la syntaxe générale est pas très différente d'une requête standard MongoDB .find():

var categoryId; // As whatever the desired value of the ObjectId is 

Product.find({ "categories._id": categoryId }, function(err,product) { 

    // Work with found document or err object here 

}); 

Donc ceci est juste une « notation de points » simple forme de la requête afin de référencer l'élément de sous-document.

Bien sûr, votre structure de schéma semble également être basé sur embedded documents ce qui signifie que vous devriez être en mesure d'accéder à l'une des autres propriétés de ce schéma ainsi:

Product.find({ "categories.name": "category name" }, function(err,product) { 

    // Work with found document or err object here 

}); 

Pour les solutions qui ont les CategorySchema objets Au sein de leur propre collection de modèles, il y a aussi la méthode .poulate() qui fournit une alternative efficace, sinon tout aussi efficace, à l'intégration là où l'intégration n'est pas pratique.

Questions connexes