对Meteor.js集合中的文档进行sorting会导致浏览器崩溃

我正在尝试从具有timestamp字段的集合中检索最新的文档。 但是,当使用find()findOne()方法使用sort说明符时,浏览器变得无法响应,CPU使用率上升,偶尔会崩溃。

与使用db.fruits.find().sort({timestamp: -1}) mongodb的直接查询相比,返回的sorting结果也没有正确sortingdb.fruits.find().sort({timestamp: -1})timestamp字段中值的示例是2013-11-28 21:48:02db.fruitsdb.fruits 5000个文档,其索引在timestamp

任何想法出了什么问题? 我在Mac OSX Chrome上使用Meteor v0.6.6.3。

情况1A:回应

 Template.fruits.fruit = function() { var fruit = Fruits.findOne({}); return fruit; } <template name="fruits"> <div>{{fruit.price}}</div> </template> 

案例1B:无反应

 Template.fruits.fruit = function() { var fruit = Fruits.findOne({},{sort:{timestamp: -1}}); return fruit; } 

情况2A:响应

 Template.fruits.fruit = function() { var fruit = Fruits.find({}, {limit :1}); return fruit; } <template name="fruits"> {{#each fruit}} <div>{{price}}</div> {{/each}} </template> 

案例2B:无反应

 Template.fruits.fruit = function() { var ticks = Ticks.find({}, {sort:{timestamp: -1}, limit :1}); return fruit; } 

只发布最新的10个水果

David Weldonbuild议

 Meteor.publish('fruits', function(userId) { return Fruits.find({}, {sort:{timestamp: -1}, limit: 10}); }); 

它停止浏览器崩溃,并返回正确的结果!

我不确定meteor在发送给客户端时是否不断尝试对文档进行sorting(每次发送新文档时都要重新启动),或者在执行sorting之前阻塞整个结果集。 无论如何,我强烈build议不要将数千个文档同步到客户端。 正如你在例子中说明的那样,networking和CPU都是资源密集型的。

您的目标应该是根据需要同步数据库的小型子集。 如果你需要在一个大的数据集上操作,我build议使用一个方法调用(并可能在服务器上caching结果)。