【问题标题】:Mongoose limit query for more performanceMongoose 限制查询以获得更高的性能
【发布时间】:2015-12-25 23:31:14
【问题描述】:

我正在尝试加载大量数据,这需要很长时间。 在前端,我显示前 5 个数据。但我认为我也必须在后端处理它。

我想点击按钮,然后它应该会出现接下来的 5 个对象。在这种情况下,在使用 Angular 的前端可以工作,但我也会在后端站点进行。

如何发送到后端以加载接下来的 5 个对象(记录)。 提前感谢您的帮助。

Node.js

router.get('/load', function(req, res) {

    Experiences.find({}).lean().exec(function(err, docs_accommo) {

        res.send(docs_accommo);


    });

});

Angular.js

app.controller('loadData', ['$scope', '$http', '$window', '$upload', '$rootScope',
function($scope, $http, $window, $upload, $rootScope) {
$http.get('/load').success(function(data) {

        $scope.datafront = data;
    });

$scope.totalDisplayed = 5;

    $scope.loadMore = function() {
        $scope.totalDisplayed += 5;
    };

});

HTML

<div  ng-repeat="x in datafront | limitTo:totalDisplayed track by x._id" ng-cloak>
{{x}}

</div>


<button   class="btn btn-default" ng-click="loadMore()" style="float:right; margin-bottom:20px;" onClick="nanobar.go(100)">

加载更多

【问题讨论】:

    标签: angularjs node.js mongodb mongoose


    【解决方案1】:

    我通常会这样做:

    router.get('/load', function(req, res) {
    
        var skip = req.query.skip || 0;
        var limit = req.query.limit || 50;
    
        Experiences
            .find()
            .lean()
            .skip(skip)
            .limit(limit)
            .exec(function(err, docs_accommo) {
    
                res.send(docs_accommo);
    
    
        });
    
    });
    

    角度:

    app.controller('loadData', ['$scope', '$http', '$window', '$upload', '$rootScope',
    function($scope, $http, $window, $upload, $rootScope) {
        $scope.datafront = [];
    
        function loadMore() {
            $http.get('/load',
                     {params: {limit: 5, skip: $scope.datafront.length}})
            .success(function(data) {
    
                $scope.datafront = $scope.datafront.concat(data);
            });
        }
    
        loadMore();
    
    
        $scope.loadMore = loadMore;
    
    });
    

    【讨论】:

    • 非常感谢。能否简要解释一下它是如何通过跳过和限制工作的?
    • 当然。在每个请求上,您都向 mongo 提供要跳过的记录数并限制 num 到。假设您想按 5 加载(如在您的原始帖子中),所以通过 limit: 5。要跳过的数字是当前已显示项目的数量,所以skip: $scope.datafront.length。在每个请求项与已加载的项连接之后。
    • 好的,我已经实现了,但是 html 会是什么样子?在我的例子的情况下?我没有收到数据
    • 摆脱| limitTo:totalDisplayed
    • 不,我认为参数不起作用。删除它后,数据正​​在呈现,但 loadMore() 按钮没有增加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    相关资源
    最近更新 更多