可扩展的Express + Mongoose排序和限制分页

时间:2017-01-09 10:20:38

标签: javascript node.js mongodb pagination

我试图弄清楚如何有效地对数据进行分页。如果我有一个网址,例如:example.com/items?page=5,我怎样才能每次都检索到正确的记录(以便相同的记录不会显示在另一个页面上)?我想我必须首先对DB记录进行排序,然后使用mongoose进行范围查询,例如下面的查询。

当记录数量迅速扩大时,这种情况如何?我担心分拣过程需要太长时间,并且会阻碍整个过程。有什么建议吗?

Submission.find({
  /* First Case: Hour */
  created: { $lt: new Date(), $gt: new Date(year+','+month+','+day+','+hour+','+min+','+sec) } // Get results from start of current hour to current time.
  /* Second Case: Day */
  created: { $lt: new Date(), $gt: new Date(year+','+month+','+day) } // Get results from start of current day to current time.
  /* Third Case: Month */
  created: { $lt: new Date(), $gt: new Date(year+','+month) } // Get results from start of current month to current time.
  /* Fourth Case: Year */
  created: { $lt: new Date(), $gt: new Date(year) } // Get results from start of current year to current time.
})

1 个答案:

答案 0 :(得分:1)

您可以处理以下查询:

var query = Model.find(conditions).sort(sort).skip(skip).limit(limit);

其中

  1. 条件将是{age:{$ gt:20}}
  2. 排序将是{name:1}
  3. 跳过将会说20
  4. 限制将是10
  5. 然后执行以下查询以获取记录

    return query
            .exec()
            .then(function (cursor) { ...... });