【问题标题】:How do I paginate an array of _id in mongoose? [duplicate]如何在 mongoose 中对 _id 数组进行分页? [复制]
【发布时间】:2017-12-06 06:36:27
【问题描述】:

目前,我有一个困惑,那就是对 Schema 中的一组项目进行分页。

所以从技术上讲,每个用户都有一个购物车,我想对购物车的商品进行分页。例如,假设购物车存储了 18 件商品。我想将购物车分页到只有 5 个项目。

这是架构

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

这是路线

我目前的方法

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 });
  });
});

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

【问题讨论】:

  • $slice.select({ 'cart': { '$slice': [skip,limit] } })。自 MongoDB 首次发布以来,它就一直存在。
  • 奇怪的是问题被标记为重复。 Mongoose != MongoDB,并且声明为重复的问题是关于 MongoDB 的,并且没有回答这个问题。 @NeilLunn 的评论才是真正的答案。

标签: node.js mongodb mongoose pagination


【解决方案1】:

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

如果你有大量数据,客户端第一次从服务器加载数据需要很长时间,所以对于大量数据可能不是正确的方法,在这个如果您可能希望以块的形式加载数据,也可能在后台加载数据,并且 也可以在后台使用服务器执行计算 - 以进行优化。

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

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多