请教一个关于nodejs使用mongodb时查询方面的一个问题
发布于 10 年前 作者 agxcul 4407 次浏览 最后一次编辑是 8 年前 来自 问答

就是在使用db.collections.find()时有没有比较高明的倒序查询方式?

因为之前都是用关系型数据库做的项目这是第一次用nosql进行开发所以遇到了些问题特来请教各位大牛…

我查了一下大多是在数据库中加一个作为引索的属性然后通过db.collections.find.sort({index:-1})来实现的…或者另外就是取出来后在程序端倒序发给客户端

觉得第一种做法有点浪费资源了吧…我仅仅是想要把按照collection里的内容按倒序find而已啊…第二种做法的话如果我是要实现一部分一部分加载内容这么做也挺浪费的吧?

事实上个人觉得mongodb的存取方式(insert ,find)跟队列很相似,都是先进先出…但是在开发应用过程中会经常碰到需要倒序取数据的场合…比如显示留言板最新留言之类的…

但是我对mongodb的底层实现其实不太了解…

所以来这里请教一下各位大牛有没有比较科学合理的解决方案…还是说真的就只有插一个属性作为排序引索这一个解决方案?

5 回复

MongoDB采用B-tree索引。如果是单属性的索引,MongoDB既可以从头往后查找,也可以从后往前查找。因此,不会有你说的浪费资源的问题。

MongoDB文档:索引的顺序

加一个 create_at 来当索引用,别怕浪费。

@alsotang [@bnuhero](/user/bnuhero) 嗯嗯…谢谢两位大神~看了[@bnuhero](/user/bnuhero) 给出的文档觉得只有这个做法了…我之前的意思倒不是说因为多了一个属性而怕浪费…而是觉得即使事实上这个collection的内容不需要排序还是执行了.sort对collection多进行了一次遍历,而事实上这多出的一次遍历是多余的…

@agxcul 如果你对那个 sort 的字段进行了索引的话,也不会多一次遍历啊。这个地方跟 sql 的差别不大,补一补。

@alsotang 哦哦~学到新姿势了!谢啦!

回到顶部