集合中有几个对象,如下所示。
{
"_id" : ObjectId("5c743e22d1b01269aa08922e"),
"name" : "NAME",
...
}
{
"_id" : ObjectId("5c743e21d1b01269aa08922d"),
"name" : "EMAN",
....
}
我想用此代码检索一定数量的数据。
var showPage = function(page){
return db.orders.find().sort( { "_id": -1 } ).skip((page-1)*2).limit(2);
}
> showPage(1)
> showPage(2)
....
当将showPage(1)与10个对象(例如[1、2、3,...,9、10])一起使用时,我可以得到[10,9],使用showPage(2)可以得到[8,7] 。
但是,如果有人在showPage(1)和showPage(2)之间插入[11,12]到集合中,则showPage(2)会检索与期望结果不同的[10,9]。 [8,7]。
如何修改此查询以检索所需结果?
答案 0 :(得分:1)
容易,只需在查询中包括上限:
db.orders.find({"_id": {$lte: 10}}).sort( { "_id": -1 } ).skip((page-1)*2).limit(2);
但是请注意,这不会保护您免受插入范围中间(如果发生)的影响。