Mongodb 使用相等值迭代文档

Mongodb 使用相等值迭代文档,mongodb,mongodb-query,database,nosql,Mongodb,Mongodb Query,Database,Nosql,我在mongo db中收集了一些带有“投票”字段的博客帖子: > db.posts.find({}, {_id:0, votes: 1}) { "votes" : 1 } { "votes" : 2 } { "votes" : 2 } { "votes" : 3 } { "votes" : 3 } 我有一个网页界面,每页显示一篇文章,并控制(下一页,上一页)按投票顺序滑动文章。我将下一个/上一个帖子的请求发送到当前投票计数的服务器,并选择新的一个。所以我得到下一个查询(每个http请求一

我在mongo db中收集了一些带有“投票”字段的博客帖子:

> db.posts.find({}, {_id:0, votes: 1})
{ "votes" : 1 }
{ "votes" : 2 }
{ "votes" : 2 }
{ "votes" : 3 }
{ "votes" : 3 }
我有一个网页界面,每页显示一篇文章,并控制(下一页,上一页)按投票顺序滑动文章。我将下一个/上一个帖子的请求发送到当前投票计数的服务器,并选择新的一个。所以我得到下一个查询(每个http请求一个)

正如您所看到的,跳过的文档中的“投票数”相等。因此,我需要一些方法使文档唯一,并迭代equals投票(投票字段可能会经常更新,并且每个文档都有许多equals值)


有没有办法解决这个问题?看起来我需要一些搜索索引。但正如我所说,标准字段经常更改,我计划有一个数百万的文档。这意味着索引更新将是非常昂贵的操作,我希望系统在更新时能够安全响应。

如果您不关心结果返回的顺序,您应该按照
\u id
对它们进行排序,然后使用
{$gt:current\u id}
获得下一个:

db.things.findOne({}, {votes: 1}).sort({_id: 1}) // _id == 0
db.things.findOne({_id: {$gt: 0}}, {votes: 1}).sort({_id: 1}) // _id == 1
db.things.findOne({_id: {$gt: 1}}, {votes: 1}).sort({_id: 1}) // _id == 2
...
如果需要按
投票
排序,则需要使用
跳过

db.things.findOne({}, {votes: 1}).sort({votes: 1})
db.things.findOne({}, {votes: 1}).sort({votes: 1}).skip(1)
db.things.findOne({}, {votes: 1}).sort({votes: 1}).skip(2)
...
但这会越来越慢,因为您必须越来越深入地跳过结果集

db.things.findOne({}, {votes: 1}).sort({votes: 1})
db.things.findOne({}, {votes: 1}).sort({votes: 1}).skip(1)
db.things.findOne({}, {votes: 1}).sort({votes: 1}).skip(2)
...