2016-06-27 4 views
0

skiplimit을 사용하여 Mongo와 페이지 매김을하려고합니다.mongodb 건너 뛰기로 정렬하고 인덱스에 따라 레코드를 정렬하지 않습니다.

페이지 레코드를 register_time별로 정렬하고 싶습니다. 데이터베이스에서 레코드는 register_time이 아니라 인덱스별로 정렬됩니다.

여러 페이지의 레코드 (여러 번 건너 뛰기)를 동일한 register_time 순서로 만들려면 어떻게해야합니까?

db.collection.aggregate(
[ { "$project" : { "os" : "$os", 
        "register_time" : "$register_time", 
        "channel" : "$channel", 
        "event" : "$event", 
        "user_id" : "$user_id" } }, 
    { "$match" : { "register_time" : 
       { "$gt" : ISODate("2016-06-23T00:00:00Z"), 
        "$lt" : ISODate("2050-06-25T23:59:00Z") }, 
        "event" : "Register_with_number", 
        "channel" : "001" } }, 
    { "$group" : { "_id" : 
        { "register_time" : "$register_time", 
        "user_id" : "$user_id", 
        "os" : "$os", 
        "channel" : "$channel" }, 
        "count" : { "$sum" : 1 } } }, 
    {"$skip":4}, 
    {"$limit":10}, 
    { "$sort" : {"_id.register_time" : -1 } } ]) 

그리고 여기가 skip 결과

{ "_id" : { "register_time" : ISODate("2016-06-24T08:49:36Z"), "user_id" : "65675f96", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T06:29:56Z"), "user_id" : "f61d0572", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T04:13:31Z"), "user_id" : "d7d1349d", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T03:40:13Z"), "user_id" : "ecea2908", "os" : "Android", "channel" : "040401" }, "count" : 1 } 

입니다 그리고 여기 두 번째 skip 결과 : 당신이 볼 수 있듯이

{ "_id" : { "register_time" : ISODate("2016-06-24T09:05:13Z"), "user_id" : "6fde06a6", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T07:47:46Z"), "user_id" : "1e5e5712", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T05:34:55Z"), "user_id" : "47dfaa32", "os" : "Android", "channel" : "040401" }, "count" : 1 } 
{ "_id" : { "register_time" : ISODate("2016-06-24T05:15:03Z"), "user_id" : "70960ae2", "os" : "Android", "channel" : "040401" }, "count" : 1 } 

, 두 페이지의 register_time가 같은 순서에 따라되지 않습니다 .

일관된 순서로 여러 페이지 (건너 뛰기)를 만들려면 어떻게해야합니까? 감사.

답변

1

당신은 무작위로 입력

을 기반으로 사용자가 수집 및 파이프 라인의 다음 항목에서 임의 문서를 제한하고 $limit하기로 $limit$skip

전에 $sort를 이동해야

관련 문제