mongodb skip查询

mongodb skip查询

最近又在利用strapi加上MongoDB数据库做一些小东西,碰到一个关于mongodb中skip的问题。

打算弄些啥心灵鸡汤啊,毒鸡汤啊做一个接口,随机返回一碗鸡汤。

方案一

刚开始我是先count 统计collection里一共有多少的文档,然后利用random在这个1到之间随机取值,最后使用skip和limit来达到这个效果。

数据量小的话,利用skip实现分页或者上面说的随机好像还是没什么大问题,但是如果数据量大的话,就会非常的慢。

The cursor.skip() method requires the server to scan from the beginning of the input results set before beginning to return results. As the offset increases, cursor.skip() will become slower.

方案二:

在每个文档里在插入一个sort整数字段,从1-N,查询的时候利用.find( { sort: { $gt: startValue } } )来实现上面的skip。

这个也是官方比较推荐的替代skip的方法。

但是,在实现我的需求的时候,我又发现了一个新的问题,假设我的数据里的sort是1,2,3,4,然后我删除了sort=3的这个文档,再利用count和.find( { sort: { $gt: startValue } } )来随机返回一个文档的话,4这个文档始终都不会取到。

目前还没想到好的解决方法,想到了再填坑(后台弄个定时任务,隔一段时间来修改一下?)。

# MongoDB 

右下角对话与我联系。


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×