我已经定义了一个猫鼬文档Note,它包含3个Date类型的字段: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 app显示内容更新的方式类似 . 该应用程序加载最新的x文档,如果用户想要查看较旧的文档,他必须滚动并滚动...

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

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

通过这种方式,客户端(app)应以不同的方式执行第一个查询,然后以前一个方式执行 .

例如:

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

  • 保持旧 _id (又名10th_id)

  • 下一个查询:

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

对此有何建议?