我们正在开发一个使用 mongoDB 作为底层数据库的 C++ 应用程序开发工具。假设用户开发了一个患者集合,其中包含字段_id (OID) 和患者# ,并且患者#具有唯一的升序索引。假设有 10 位患者,患者编号为 1、5、7、13、14、20、21、22、23、25。患者编号 20 显示为使用 limit(1) 获取。用户按下 PageDown 并显示患者# 21 -- 使用$gt和患者# = 20 很容易。
当用户按下 PageUp 时,应该显示第 14 号患者。我的(希望是错误的)解决方案是在patient#和$lt上创建并行降序索引。这意味着用户创建的每个集合都需要主键字段上的两个索引才能进行双向移动。这也适用于name等二级索引。
此外,用户按 F5,提示“要移动的记录数”,他们输入 3,应显示患者#23。或者他们输入-3,应该显示患者# 7。我的想法:首先使用覆盖查询并从索引中返回以下 3 个患者#s,然后获取第 3 个文档。当一个不太简单的应用程序有数十万个文档并且用户想要横切成千上万条记录时,这根本不理想。而且,再次,为了实现向后运动,我相信我需要第二个降序索引。
最后,我需要一种方法让用户导航到最后一个索引条目(患者 #25)。回到起点是微不足道的。再次,第二个索引?
我的问题:有没有办法使用(比如说)迭代器或指向当前索引元素的指针来横向升序索引,然后使用迭代器/指针算法来实现我想要的?即,+1 将为我提供“下一个”索引元素,我可以从中获取“下一个”文档;-1 “前一个”,+3 后第三个,-3 前第三个;索引大小到最后。或者是否有另一种没有太多开销的解决方案(多个索引、大型覆盖查询)。