MongoDB通过考虑实时插入来检索数据

时间:2019-02-27 08:36:17

标签: mongodb

集合中有几个对象,如下所示。

{
    "_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]。

如何修改此查询以检索所需结果?

1 个答案:

答案 0 :(得分:1)

容易,只需在查询中包括上限:

 db.orders.find({"_id": {$lte: 10}}).sort( { "_id": -1 } ).skip((page-1)*2).limit(2);

但是请注意,这不会保护您免受插入范围中间(如果发生)的影响。