如何在猫鼬中对 _id 数组进行分页?

sin*_*Gob 7 pagination mongoose mongodb node.js

目前,我有一个困惑,即对架构中的一系列项目进行分页。

因此从技术上讲,每个用户都有一个购物车,我想对购物车的商品进行分页。例如,假设购物车存储了 18 件商品。我想将购物车分页为仅 5 件商品。

这是架构

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

这是路线

我目前的方法

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 });
  });
});
Run Code Online (Sandbox Code Playgroud)

我当前的方法肯定会将显示的商品从 18 件限制为仅 5 件,但这会产生一个新问题,现在我无法计算购物车的总价,因为它只限制每个请求 5 件商品。

在此输入图像描述

Len*_*lan -1

您可以在客户端进行分页,这样您将从服务器获取所有产品,但在客户端上仅显示五个。它将允许您计算所有数据的平均值或其他计算。它还允许您过滤和排序所有数据。

如果您有大量数据,客户端第一次从服务器加载数据将需要很长时间,因此对于大量数据,这可能不是正确的方法,在这种情况下您可能想要以块的形式加载数据,并且可能在后台加载,并使用服务器执行计算(也可能在后台)以进行优化。

您可以找到服务器/客户端分页的优点和缺点https://dzone.com/articles/pagination-server-side-or-clie