我们公司现在的项目用的是node+mongodb,发现服务器现在有点卡顿显现,要从业务逻辑和数据库进行两方面的优化。我们项目里用了最多的是分页查询,当然就是直接用的mongoose的两个方法limit()和skip()方法。现在要一些高级查询的优化,我也查过一些关于mongodb查询方面的资料,据说是数据量大的时候尽量不用要用这两个方法,我现在的疑惑是我查询的目标数据量比较大,但是我查询过后返回的结果集都是控制在10条每页这样传给客户端的。这样的话对查询速度是否有影响呢!像这种情况如何优化请各位给点思路。拜谢!
当然不是,mongodb skip的原理你可以看下,跟你一次返回多少条数据影响不大,关键是你skip的页数,因为每次都是从第一页去遍历,所以你的性能消耗在skip不在limit,这个问题可以通过其他方式解决,比如要想skip 3页,给出第二页最后一条记录让其从该条记录查,要比你直接skip这种书写简单,实际笨重的操作指令好得多;
@haozxuan 我是用的mongoose操作的数据库,然后在网上查到的方法是用while+limit, 先查出第一页,然后用while判断,的到最后一条数据,然后再根据最后一条数据查询到下一页。但是这个while(item.hasNext)里面的item是用mongoose表模型查出来的报了没有这个方法的错误。还忘指点
var p1 = db.test.find().sort({“age”:“1”}).limit(10); var latest = null; while(p1.hasNext()){ latest = p1.next(); } db.text.find({age:{$gt:latest.age}}).sort({age:1}).limit(10); 这个如果用mongodb直接操作可能还可行,但是就按照这样用mongoose操作不行的呢!@haozxuan
@pzHong0618 hasNext传送门,根据 这里,mongoose建模驱动的确没有这个函数,当然换一种思维,你只是想要得到第一页的最后一条,find默认你会得到一个doc的arr,取数组最后一条同样可以获得第一页最后一条数据;