【发布时间】:2015-03-07 20:54:54
【问题描述】:
我有一个使用 Angular 使用 $http.get() 从 MongoDB 使用 Mongoose 和 Expressjs 获得的图像列表。
我所做的工作正常,但我对性能有疑问。
到目前为止,我找到了两种方法:
- 使用
skip - 使用
$nin
查询如下所示:
// Using $nin:
var skip = req.query.skip || [];
User.find({ _id : { $nin: skip }})
.sort({ _id: -1 })
.limit(15)
.exec(function(err, users) {
if (err) res.json({ 'msg': 'Error loading users' });
res.json({
users: users
});
});
和:
// Using skip
User.find({})
.sort({ _id: -1 })
.skip(15)
.limit(15)
.exec(function(err, users) {
if (err) res.json({ 'msg': 'Error loading users' });
res.json({
users: users
});
});
谷歌搜索似乎使用skip 一段时间后缺乏性能......
但是查看$nin 选项,我在滚动和滚动一个很长的查询后发现...有很多_id...
这两种解决方案哪个更好用?
或者有比那些更好的第三种方法,也许我做错了什么?
谢谢
【问题讨论】:
-
您还可以使用
lean()选项来减少猫鼬使用其所有方法等构建模型所需的时间。IMOskip选项在这里更好(这就是我实现分页的方式解决方案,从未遇到任何问题) -
您能告诉我更多关于
lean()的信息并写一个工作示例吗?lean()的文档缺少各种信息。谢谢。 -
lean选项告诉 mongoose 不要将它的方法包含在结果中,因此您将无法在将获得的结果上使用 mongoose。你可以像这样使用它:User.find({}).sort({ _id: -1 }).skip(15).limit(15).lean().exec(...)。它将减少从 db 获取结果所需的时间,并且几乎与本机 mongo 客户端一样快 -
@VsevolodGoloviznin
.lean()与此无关。请不要误导 cmets。 -
使用
.skip(15).limit(15)似乎不能正常工作...我总是看到重复。
标签: javascript node.js mongodb mongoose mongodb-query