从大量记录的最小化查询卡住并挂起浏览器

Sto*_*per 10 publish-subscribe angularjs meteor minimongo angular-meteor

我正在为角度流星建立一个管理页面.

我已经发布了一个集合中的所有记录:" posts "并且已经订阅了前端的所有记录.

$meteor.subscribe('posts');
Run Code Online (Sandbox Code Playgroud)

在控制器中,如果我从minimongo中选择所有记录的游标,它可以正常工作:

$scope.posts = $meteor.collection(Posts);
Run Code Online (Sandbox Code Playgroud)

但我希望显示分页,所以我想要一次有限的记录,如:

$scope.posts = $meteor.collection(function(){

        return Posts.find(

            {}, 
            {
                sort:   {'cDate.timestamp': -1},
                limit:  10
            }
        );
    });
Run Code Online (Sandbox Code Playgroud)

它在minimongo中遇到了查询.浏览器挂起了.

" posts "集合仅包含500条记录.当我有200条记录时它工作正常.

任何人都可以给我一个关于我的代码和概念错误的想法吗?

编辑:

好的!当我从查询中评论$ sort行时,它运行正常,如下所示:

$scope.posts = $meteor.collection(function(){

            return Posts.find(

                {}, 
                {
                    //sort:   {'cDate.timestamp': -1},
                    limit:  10
                }
            );
        });
Run Code Online (Sandbox Code Playgroud)

但我需要对记录进行排序.那我现在该怎么办?

编辑:

还尝试在sort属性中添加索引,如下所示:

db.Posts.ensureIndex({"cDate.timestamp": 1})
Run Code Online (Sandbox Code Playgroud)

还是同样的问题.

小智 2

浏览器崩溃是因为它在兑现之前只能加载到缓存中的数据有限。对于当您需要请求大量文档时会发生什么的问题,请将该过程从客户端中移开,并通过优化的发布和订阅方法/调用在服务器上执行尽可能多的操作。没有真正的理由在浏览器缓存中加载大量文档,因为 minimongo 的便利性在于小数据集和不需要立即与服务器同步(或永远同步)的东西。