J'ai une liste de produits, chacun avec ses propres options. Par exemple:Remplir un objet référencé par un autre objet
- Robe bleue (S - L)
- Robe rouge (XS - S - M)
Robe bleue et robe rouge sont les produits, S , L, XS, S et M sont les options. Le modèle d'options a une référence au modèle de produit, je voudrais récupérer tous les produits et puis énumérer leurs propres options.
Je voudrais y arriver avec une seule requête, mon problème est que je pars du produit qui n'a aucun lien avec ses options. Donc, je commence à trouver tous les produits, et avec un imbriqué puis avec une boucle foreach je reçois toutes ses options. Ensuite, j'essaie d'assigner l'option à l'objet produit (dans mon cas productElem à l'intérieur d'un forEach), mais lorsque je le récupère hors de la portée, il est vide. Comment remplir les options à partir d'une requête des produits?
Schéma du produit:
var schema = new Schema({
imagePath: {type: String},
title: {type: String, required: true},
description: {type: String, required: true}
});
Option schéma:
var productOptionSchema = new Schema({
type: {type: String, enum: ['grams'], default: 'grams', required: true},
value: {type: String, required: true},
price: {type: Number, required:true},
product: {type: Schema.Types.ObjectId, ref: 'User', required:true}
});
Ici, j'essayer d'obtenir les options après avoir trouvé les produits
router.get('/shop/products/list', isLoggedIn, function (req, res, next) {
Product.find()
.then(function (products) {
products.forEach(function(productElem) {
ProductOption.find({product: productElem._id})
.then(function (options) {
productElem['options'] = [];
options.forEach(function(optionElem) {
productElem['options'].push(optionElem);
});
});
});
res.render('shop/listProduct', {user:req.user, csrfToken: req.csrfToken(), messages:messages, partialCustom:
});
})
.catch(function (err) {
console.log('Error ' + err.code + ': ', err.message);
res.status(500).send('Failed to get the Product List from the DB: ' + err);
});
});
votre problème n'est pas très clair. Veuillez modifier la question pour la rendre plus compréhensible. –