2017-01-31 24 views
1

Ich bin neu in MongoDB und versuche, Daten aus einer anderen Sammlung in eine Antwort zu füllen. Das einfachste Beispiel wäre wie folgt:Ist es möglich, verschachtelte Referenzen in Mongoose zu füllen?

const CartSchema = new Schema({ 
    items: [{ 
    product: { type: Schema.Types.ObjectId, ref: 'product' }, 
    qty: Number 
    }], 
    ... 
}); 

Ich bin in der Lage .populate() zu verwenden, wenn die Beziehungen auf der obersten Ebene sind, aber in dem obigen Beispiel, ich habe ein Array von Elementen mit ihren eigenen Eigenschaften, z.B. qty, plus eine _id Referenz auf ein Produkt. Ich möchte das Produktobjekt in jedes Auto-Objekt einfügen, kann aber keine Beispiele dafür finden, auf welche Weise es "richtig" ist.

Cart.findById(id) 
    .populate('products') // <-- something like this 
    .then(record => ...) 
    .catch(next); 

Ich weiß, dass ich wahrscheinlich nach Auffinden der Warenkorb Datensatz einen separaten .find() auf die Produkte Sammlung tun könnte und manuell das anfängliche Objekt verlängern, aber ich hatte gehofft, dass es eine Möglichkeit, die Daten innerhalb der ursprünglichen Abfrage zu füllen war?

Antwort

1

Sie können dies versuchen, es wird für Sie arbeiten.

Cart.findById(id) 
    .populate('items.product') 
    .then(record => ...) 
    .catch(next); 

.populate('items.product') das product Objekt aller Wagenposition in dem Array populate.

Verwandte Themen