我可能会遗漏一些东西,因为我还在学习MongoDB的细节,但我需要帮助分页集合.
我有一个有名单的集合.
底部牛肉
鸡胸肉6oz鸡胸肉
8oz 
鸡胸肉8oz 
鸡胸肉8oz 
鸡胸肉随机
鸡腿
鸡里脊
肉鸡大腿
犹太盐
我在"ProductName,_id"上创建了一个复合索引.
我运行这个查询:
db.ProductGuideItem.find( { ProductName: { $gt: "Chicken Breast 8oz" } } ).sort({ProductName:1,_id:1}).limit(3); 
请注意,有3个"鸡胸肉8oz"项目.
如果我运行该查询,我得到... 
鸡胸肉随机
鸡腿
鸡里脊肉
 
如果我正在分页并从顶部开始.该查询将错过其他2"鸡胸肉8oz".
因此,如果每个页面只能有3个项目,我想看到第2页,那么我应该看到.. 
鸡胸肉8oz 
鸡胸肉8oz 
鸡胸肉随机.
但我不是.这将是最后一个鸡胸肉8盎司,并从那里开始.
有没有解决的办法?
如果列表以相反的方式排序,我该怎么做呢?
我使用Go作为后端,使用MongoDB作为数据库,并使用beego框架来开发此应用程序。我想在前端进行分页。
我的结构看起来像这样:
type Employee struct {
        Name               string
        EmpId              string
        Password           string
        PhoneNumber        int32
        EmailAddress       string
        Position           string
        AccessLevel        string
        Gender             string
        MaritalStatus      string
        Nationality        string
        Department         string
        ICNumber           string
        JoinDate           time.Time
        ConfirmationDate   time.Time
        EndDate            time.Time
        AnnualLeave        []*AnnualLeaveInfo
        MedicalLeave       []*MedicalLeaveInfo
        NopayLeave         []*NopayLeaveInfo
        ChildcareLeave     []*ChildcareLeaveInfo
    }
type AnnualLeaveInfo struct {
        Id           int
        Days         float64
        Type         string
        From         time.Time
        To           time.Time
        AppliedDate  time.Time
        Status       string
        Certificate  []*CertificateInfo
    }
其他请假信息与年假信息相同。我想显示所有雇员文档的所有叶子,这些叶子按适用日期和状态排序。现在,我要获取所有休假详细信息,然后追加到数组中,然后使用游标值(在上一个响应中传递到前端的数组的最后检索索引值)并从数组中查找值。我知道这不是一个好函数,因为对于每个请求,它都需要检索所有请假详细信息,以便仅检索前端请求的20个请假详细信息。
追加到数组后的结果是这样的
  "0": {
    "LeaveEmpId": "rajeshk",
    "Name": "rahul",
    "LeaveId": 8,
    "LeaveType": "annualleave",
    "LeaveTotal": 2, …我使用页码和限制在 Go 中创建了分页。在哪里Limit & Page Number are INT
我创建了如下分页:
MONGO_SESSION.Find(nil).Skip(pageNumber*limit).Limit(limit).Sort("_id").All(&RETURN_STRUCT)
它工作正常。但是当我发送页码或限制为零时。默认情况下 mongo DB 返回所有记录,因为没有什么可以跳过和限制的。
所以我的问题是,在零限制和零页码的情况下什么是好的做法。
练习 1:发送所有数据。不要发送错误响应。
实践二:发送错误响应说“页数和限制不能为零”
注意:我不能硬编码限制或页码。
任何建议将不胜感激。