mongodb中的分页避免skip()和limit()

时间:2018-03-09 13:09:17

标签: json node.js mongodb mongoose

我是nodejs的新手,我想搜索大数据,如何在不使用skip()和limit()的情况下搜索文档,我的数据库结构是

{
    "_id" : ObjectId("5a9d1836d2596d624873c84f"),
    "updatedAt" : ISODate("2018-03-05T10:13:10.248Z"),
    "createdAt" : ISODate("2018-03-05T10:13:10.248Z"),
    "phone" : "+92333333",
    "country_code" : "+92",
    "verified_user" : false,
    "verification_code" : "2951",
    "last_shared_loc_time" : ISODate("2018-03-05T10:13:10.240Z"),
    "share_loc_flag_time" : ISODate("2018-03-05T10:13:10.240Z"),
    "share_location" : true,
    "deactivate_user" : false,
    "profile_photo_url" : null,
    "__v" : 0
}

如何使用createdAt进行搜索。 我需要一个mongodb查询,它向api请求并显示用户

2 个答案:

答案 0 :(得分:0)

{
  uid : 1,
  name: 'abc'
  ...
} 
{
  uid : 2,
  name: 'abc'
  ...
}
....
{
  uid : 10,
  name: 'abc'
  ...
}
{
  uid : 11,
  name: 'abc'
  ...
}

现在,您可以像uid > 0uid <5

那样查询获取数据

然后在下一个广告位中获取数据,uid > 5uid <10就像明智一样......

可能这个approcah可以帮助你

答案 1 :(得分:0)

当我们在MongoDB中拥有大数据时,建议不要使用skip(),因为始终要求服务器从集合的开头走,您可以使用_id索引与limit()进行操作分页,因为_id字段在MongoDB中默认编入索引,因此您可以使用此字段获得良好的性能。

对于第一页,您需要使用_id获取上一个文档的limit()值:

db.users.find().limit(8);

last_id = id;

其次,下一页将最后_id值与下一个_id进行比较:

 db.users.find({'_id' > last_id}).limit(8);

例如假设第一个_id等于1000所以:

                1000 < 1008  ==> PAGE 1 where last_id=1008
                1008 < 1016  ==> PAGE 2 where last_id=1016
                1016 < 1024  ==> PAGE 3 where last_id=1024