2

我定义了一个 mongoose 文档 Note,其中包含 3 个日期类型字段:created_on、updated_on 和 date。只有后者由用户修改,其余的在后端自动设置。

var NoteSchema = new Schema({
  user: { type: String, default: 'anonymous', trim: true },
  comments: { type: String, default: '', trim: true },
  date: {type: Date, default: function (){ return moment.utc() }, required: true},
  created_on: {type: Date, default: function (){ return moment.utc() } },
  updated_on: {type: Date, default: function (){ return moment.utc() } },  
  deleted: {type: Boolean, default: false }
});

移动应用程序正在使用此数据并恢复数据。后端使用此排序选项返回数据:

 options.sort = {
       date: -1,
       created_on: -1
 }

目前文档很少,因为它没有投入生产,但我想知道这种排序策略是否符合应用程序投入生产时的要求。唯一的要求是向用户展示他们最新的笔记,但考虑到他应该能够浏览他的所有笔记(最多 6 个月大)。这类似于 facebook 应用程序显示内容更新的方式。该应用程序加载最新的 x 文档,如果用户想查看较旧的文档,他必须滚动并滚动...

我正在考虑实现一个分页系统,避免使用“skip”,因为大跳跃的性能问题。也许一个好的策略是使用 .limit(MAX_DOCUMENTS),按 _id: -1 排序并以这种方式请求文档:

Note.find({_id: {$lt: older_id }}).sort({_id: -1}).limit(MAX_DOCUMENTS);

通过这种方式,客户端(应用程序)应该以不同的方式执行第一个查询,然后执行前一个查询。

例如:

  1. 第一个查询:Note.find().sort({_id: -1}).limit(10);

  2. 保持较旧_id(又名 10th_id)

  3. 下一个查询:

    Note.find({_id: {$lt: id_previously_kept }}).sort({_id: -1}).limit(10);

对此有什么建议吗?

4

0 回答 0