2014-10-06 50 views
0

我正在使用一个MongoDB数据库。 For the front AngularJS。我正在使用猫鼬Mongoose,AngularJS,NodeJS

我:

app.get("/images", function(req, res) { 
    mongoose.model('Image').find(function (err, images) { 
     res.send(images); 
    }); 
}); 
app.listen(3000); 

它正常工作,当我去:http://localhost:3000/images

则:

<div ng-repeat="photo in photos"> 
    <!-- My Data List --> 
    <h3>{{photo.name}}</h3> 
</div> 

直到这里,一切都很好。

但是我将有如千位和千位的数据显示。 因此,我需要像前面的“无限滚动”的东西,我也需要限制查询范围或分页的API http://localhost:3000/images ???

我该如何着手处理大量数据

谢谢!

回答

0

使用服务器端分页使用mongoose-paginate猫鼬,并限制您的查询输出。包含角度使用分页的方法相同angular-ui pagination。如果你想使用无限滚动然后在角度使用ngInfiniteScroll

希望这会有所帮助。

+0

谢谢,我将采取看! – Carlos 2014-10-06 16:02:54

0

您可以使用猫鼬查询API来指定哪些条件来搜索:http://mongoosejs.com/docs/queries.html

您可以使用where()到指定分页标准,例如,where({id: {$gt: page}})(假设你正在使用某种形式的自动递增的ID)和limit()来指定您的页面大小,例如,limit(10)

每次您向服务器查询其他页面时,都需要在URL中提供条件:/images?page=1。每次获取页面时,这个标准应该增加10。

条件可以是表示数据顺序排序的任何内容,无论是ID,还是时间戳或其他任意值。

0

为了限制数据獴:

mongoose.model('Image').limit(10).exec(function(err, images){ 
    // get the images.... 
}); // this will only return 10 images 

虽然角度可以使用limitTo过滤器:

<div ng-repeat="photo in photos | limitTo: 10 "> 
    <!-- My Data List --> 
    <h3>{{photo.name}}</h3> 
</div> 

现在,从这里你可以学到如何进行分页或无穷远滚动。 (网上有关于此主题的各种内容)

1

如果数量巨大,您可能不希望一次加载所有数据。 首先我会做这样的事情,限制你为每个请求获得的条目数量。

app.get("/images", function(req, res) { 
    var query = mongoose.model('Image').find({}) 
       .limit(req.query.numberOfItems) 
       .skip(req.query.index) 

    query.exec(function (err, images) { 
     res.send(images); 
    });  
}); 
app.listen(3000); 

在客户端,您应该决定在需要时动态加载更多数据。

这取决于你想要的用户体验是什么一点点的是,例如有不同的网页,一旦你打开下一个页面加载更多的数据,或者如果用户向下滚动进一步等

+0

感谢您的帮助! – Carlos 2014-10-06 16:03:28