使用 UUID 和时间戳寻求分页

问题描述

我使用这个命令插入文档:

db.collection.insertMany([{
  _id: "21cc6c1a-736b-4da8-bb5b-2b5d95533231",timestamp: "2021-02-16T03:17:55.163Z"
},{
  _id: "f779e93e-80b8-43c7-866d-ce0a715d8d60",timestamp: "2013-07-16T19:20:30.45Z"
},{
  _id: "8a8b17b3-10e3-4bd2-810d-4abf9f8558be",timestamp: "2012-07-16T19:20:30.45Z"
},{
  _id: "7bf3bfc8-289a-4ae4-be50-1467832769be",timestamp: "2011-07-16T19:20:30.45Z"
},{
  _id: "e4564e45-d7df-4cac-a91a-4f0796da38db",timestamp: "2000-07-16T19:20:30.45Z"
},{
  _id: "be89c142-7e27-4ab8-bce1-488a3a6470fd",timestamp: "1999-07-16T19:20:30.45Z"
},{
  _id: "f4156dfb-8d1e-4a46-991a-e381c73c929a",timestamp: "1998-07-16T19:20:30.45Z"
},{
  _id: "ca6c6634-716d-448f-aebe-36c892da2719",timestamp: "1997-07-16T19:20:30.45Z"
},{
  _id: "9b0062ab-4d9b-4e2b-b244-8e5a23c61b47",{
  _id: "3ca2475e-9a39-445b-9828-846fde7c85d4",timestamp: "1997-07-16T19:20:30.45Z"
}])

如果我显示从最新到最新的所有文档,我会这样做:

> db.collection.find().sort({ timestamp: -1,_id: -1})
{ "_id" : "21cc6c1a-736b-4da8-bb5b-2b5d95533231","timestamp" : "2021-02-16T03:17:55.163Z" }
{ "_id" : "f779e93e-80b8-43c7-866d-ce0a715d8d60","timestamp" : "2013-07-16T19:20:30.45Z" }
{ "_id" : "8a8b17b3-10e3-4bd2-810d-4abf9f8558be","timestamp" : "2012-07-16T19:20:30.45Z" }
{ "_id" : "7bf3bfc8-289a-4ae4-be50-1467832769be","timestamp" : "2011-07-16T19:20:30.45Z" }
{ "_id" : "e4564e45-d7df-4cac-a91a-4f0796da38db","timestamp" : "2000-07-16T19:20:30.45Z" }
{ "_id" : "be89c142-7e27-4ab8-bce1-488a3a6470fd","timestamp" : "1999-07-16T19:20:30.45Z" }
{ "_id" : "f4156dfb-8d1e-4a46-991a-e381c73c929a","timestamp" : "1998-07-16T19:20:30.45Z" }
{ "_id" : "ca6c6634-716d-448f-aebe-36c892da2719","timestamp" : "1997-07-16T19:20:30.45Z" }
{ "_id" : "9b0062ab-4d9b-4e2b-b244-8e5a23c61b47","timestamp" : "1997-07-16T19:20:30.45Z" }
{ "_id" : "3ca2475e-9a39-445b-9828-846fde7c85d4","timestamp" : "1997-07-16T19:20:30.45Z" }

假设 1 页是 5 个文档,我如何将文档 be89c142 获取到 3ca2475e? 我认为这些命令会起作用,但结果很奇怪:

> db.collection.find( {  timestamp: { $lte: "2000-07-16T19:20:30.45Z" } }).sort({timestamp: -1,_id: -1})
{ "_id" : "e4564e45-d7df-4cac-a91a-4f0796da38db","timestamp" : "1997-07-16T19:20:30.45Z" }

(不应包含 e4564e45)

> db.collection.find( { _id:  {        $lt: "e4564e45-d7df-4cac-a91a-4f0796da38db"      },timestamp: { $lte: "2000-07-16T19:20:30.45Z" } }).sort({timestamp: -1,_id: -1})
{ "_id" : "be89c142-7e27-4ab8-bce1-488a3a6470fd","timestamp" : "1999-07-16T19:20:30.45Z" }
{ "_id" : "ca6c6634-716d-448f-aebe-36c892da2719","timestamp" : "1997-07-16T19:20:30.45Z" }

(缺少 f4156dfb)

> db.collection.find(   { _id:     {        $lt: "e4564e45-d7df-4cac-a91a-4f0796da38db"      }   } ).sort({ timestamp: -1,"timestamp" : "2021-02-16T03:17:55.163Z" }
{ "_id" : "8a8b17b3-10e3-4bd2-810d-4abf9f8558be","timestamp" : "2011-07-16T19:20:30.45Z" }
{ "_id" : "be89c142-7e27-4ab8-bce1-488a3a6470fd","timestamp" : "1997-07-16T19:20:30.45Z" }

(不正确的文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)