2016-12-20 1 views
0

Ich möchte zusätzliche Felder füllen, nachdem ich bereits ein Dokument geladen habe.Kann ich mehr Felder füllen, nachdem ich bereits ein Dokument auf Mungo geladen habe?

Ich lade meine Karre auf einem E-Commerce Ich baue, wie dies auf allen Strecken:

app.use(function(req, res, next) { 
    Cart.findOne({session: req.cookies['express:sess']}) 
    .populate({ path: "products.product", select: "price name photos slug" }) 
    .exec(function(err, cart){ 
    if(err){ 
     return err; //TODO: PAG 500 
    } 
    if(cart){ 
     res.locals.cart = cart; 
    } else { 
     res.locals.cart = new Cart({ session: req.cookies['express:sess']}); 
    } 
    next(); 
    }); 
}); 

Aber an einer Seite, ich möchte aus dem Produkt mehr die Felder Beschreibung und Addons haben loaded . Ich habe versucht, nur die Produkte zu laden, aber dann vermisse ich die dazugehörigen Informationen der Menge, die ich auf den Wagen

var CartSchema = new Schema({ 
    products: [{ 
    product: { type: Schema.ObjectId, ref : 'Product' }, 
    quantity: { type: Number, default: 1} 
    }], 
    totalItems: { type: Number, default: 0}, 
    message: { type: String }, 
}); 

Ich weiß, ich könnte diese brechen in mehr Middle nach meinen Bedürfnissen auf den Feldern auf unterschiedlichen haben Seiten, oder laden Sie den Warenkorb neu, und ich könnte auch einfach beide Arrays durchlaufen, die Produkte, die ich neu lade und die Produkte, die ich auf den Wagen geladen habe, und eine Art Merge machen, aber ich dachte mir, dass Mungo eine Möglichkeit haben könnte.

+0

Möchten Sie das? http://mongoosejs.com/docs/populate.html Oder was meinst du? Wo sind die Felder 'description' und' addons'? – Cristy

+0

Nein, ich verwende bereits populate: ".populate ({path:" products.product ", wählen Sie:" price name photos slug "})" Was ich tun möchte, ist, später mehr Felder zu füllen wenn ich das Dokument bereits geladen habe – iagowp

+0

Warum bevölkern Sie sie nicht von Anfang an? Sie können später anhand der Produkt-ID eine Auswahl treffen, wenn Sie später mehr Daten erhalten möchten. – Cristy

Antwort

0

Sie können nicht "re-populate" ein populated field.

Wie wäre es mit einem einfachen if, um zu bestimmen, welche Felder Sie ausfüllen möchten. Zum Beispiel:

app.use(function(req, res, next) { 
    var productSelect; 

    // This is just an example, you can get the condition from params, body, header.. 
    if (req.body.isMoreField) { 
    productSelect = 'add more field in here'; 
    } 
    else { 
    productSelect = 'less field here'; 
    } 

    Cart 
    .findOne({ 
     // ... 
    }) 
    .populate({ 
     // ... 
     select: productSelect, 
     // ... 
    }) 
    .exec() 
    .then(function(cart) { 
     // ... 
    }) 
}); 
+0

Hmm, ich denke, es macht mehr Sinn, es in verschiedene Middlewares zu brechen, da ich kein einfaches Argument habe ich kann auf dem if verwenden. Wie auch immer, ich wählte Ihre Antwort aus, weil Sie geantwortet haben, dass ich nicht tun kann, was ich tun wollte. – iagowp

Verwandte Themen