2017-07-03 13 views
1

Derzeit habe ich diese Verwirrung, die ein Array von Elementen in einem Schema paginieren soll.Wie paginiere ich ein Array von _id in Mungo?

So technisch hat jeder Benutzer einen Warenkorb und ich möchte die Artikel des Wagens paginieren. Nehmen wir an, der Einkaufswagen enthält 18 Artikel. Ich möchte den Einkaufswagen auf nur 5 Elemente paginieren.

Hier ist das Schema

const UserSchema = new Schema({ 
    email: { type: String, unique: true, lowercase: true}, 
    cart: [{ 
    type: Schema.Types.ObjectId, ref: 'Product' 
    }], 
}); 

Hier ist die Strecke

Mein aktueller Ansatz

router.get('/cart', (req, res, next) => { 
    User.findOne({ _id: req.user._id }) 
    .populate({ 
    path: 'cart', 
    options: { limit: 5 } 
    }) 
    .exec((err, user) => { 

    res.render('order/cart', { user: user }); 
    }); 
}); 

Mein aktueller Ansatz wird auf jeden Fall die Elemente aus 18 Elemente nur 5 gezeigt begrenzen Artikel, aber das schafft ein neues Problem, das ich jetzt nicht berechnen kann er Gesamtpreis des Wagens, weil es nur 5 Stück pro Anfrage begrenzt.

enter image description here

+1

Mit [ '$ slice'] finden (https://docs.mongodb.com/manual/reference/operator/projection/slice/). '.select ({'cart': {'$ slice': [überspringen, begrenzen]}})'. Es gibt es seit der ersten Veröffentlichung von MongoDB genau für diesen Zweck. –

Antwort

1

Sie können auf der Client-Seite die Paginierung tun, auf diese Weise Sie alle Produkte vom Server erhalten werden, aber nur fünf auf dem Client angezeigt werden soll. Damit können Sie den Durchschnitt oder eine andere Berechnung für alle Daten berechnen. Außerdem können Sie alle Daten filtern und sortieren.

Wenn Sie eine große Menge an Daten haben, wird es lange dauern, bis der Client die Daten zum ersten Mal vom Server lädt, so dass es für große Datenmengen möglicherweise nicht der richtige Weg ist In diesem Fall möchten Sie wahrscheinlich die Daten in Chunks laden, und vielleicht im Hintergrund, und führen Sie die Berechnung mit dem Server vielleicht auch im Hintergrund-für die Optimierung.

Sie können Vor- und Nachteile der Server/Client pagentaion https://dzone.com/articles/pagination-server-side-or-clie

Verwandte Themen