Angularjs 和 Mongoose 的无限滚动 - 性能
Infinite scroll with Angularjs and Mongoose - performance
我有一个图像列表,我使用 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
});
});
用 Google 搜索似乎使用 skip
一段时间后性能不足...
但是查看 $nin
选项我在滚动和滚动一个很长的查询后发现...有很多 _id
...
2个解决方案中哪个更好用?
或者还有第三种方法比那些好得多,也许我做错了什么?
谢谢
理想情况下,您希望对要排序的内容使用 $nin
with a list of previously seen _id
values but combine that with a $gte
or $lte
(取决于顺序)运算符。
大多数 "otherwise sorted queries" 都是这种情况,但是如果 _id
字段是您要排序的字段(并且按降序排列),这就变成了一个工作问题使用 $lt
查找小于上一页 "last seen value" 的值。
因此,在迭代时,存储 "page limit" 结果中最后一项的 "last seen value",然后在后续查询中使用 $lt
运算符:
即:
var lastSeen = null; // declare in a global or session or something
User.find({})
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});
然后:
User.find({ "_id": { "$lt": lastSeen })
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});
我有一个图像列表,我使用 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
});
});
用 Google 搜索似乎使用 skip
一段时间后性能不足...
但是查看 $nin
选项我在滚动和滚动一个很长的查询后发现...有很多 _id
...
2个解决方案中哪个更好用?
或者还有第三种方法比那些好得多,也许我做错了什么?
谢谢
理想情况下,您希望对要排序的内容使用 $nin
with a list of previously seen _id
values but combine that with a $gte
or $lte
(取决于顺序)运算符。
大多数 "otherwise sorted queries" 都是这种情况,但是如果 _id
字段是您要排序的字段(并且按降序排列),这就变成了一个工作问题使用 $lt
查找小于上一页 "last seen value" 的值。
因此,在迭代时,存储 "page limit" 结果中最后一项的 "last seen value",然后在后续查询中使用 $lt
运算符:
即:
var lastSeen = null; // declare in a global or session or something
User.find({})
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});
然后:
User.find({ "_id": { "$lt": lastSeen })
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});