0
skip
とlimit
を使用して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つの一貫した順序に従うにはどうすればよいですか?ありがとう。