2016-06-27 7 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 } 

、2ページのregister_timeが同じ順序に従っていません。

異なるページ(スキップ)を1つの一貫した順序に従うにはどうすればよいですか?ありがとう。

答えて

1

あなたはランダムな入力

に基づいていますが、コレクションと次のパイプラインのエントリからランダムに文書を制限している $limitやって $limit$skip

$sortを移動する必要があります

関連する問題