限制服务器端Meteor的结果数量?

时间:2013-02-26 17:36:34

标签: performance meteor database-connection subscriptions

我有一些代码,如下所示。 Mongo中我的关键字集合中有大约60K条目。我真的只想要前25名,所以我试图设置限制查找。我正在运行相同的查询来打印出我的结果数量。出于某种原因,限制似乎不起作用,因为我的日志消息显示为60K左右。

这种事情不可能吗?我可以设置一个有效的客户端限制,但我想我会尝试限制服务器上的内容,以便减少发送的数据。

一些额外的信息:

  • 我正在使用自己的Mongo数据库,而不是流星提供的数据库;用env变量指向它
  • 版本0.5.7

非常感谢任何帮助。

if (Meteor.isServer) {
   Meteor.startup(function() {
   console.log('server startup');

   Meteor.publish("keyword_hits", function() {
        console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).count());
        return Keywords.find({}, {sort: {count:-1}, limit:25});
    });
 });

1 个答案:

答案 0 :(得分:16)

使用Meteor附带的Mongo API,.count()不会考虑LimitsSkips,因此您所看到的将始终是最大金额你收藏的东西。

如果你这样做

Meteor.publish("keyword_hits", function() {
        console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).fetch().length);
        return Keywords.find({}, {sort: {count:-1}, limit:25});
});

所以不是打电话给.count()而是打电话,.fetch()会从您的收藏集中返回所选的25个条目,然后在其上调用.length,您会看到正确的条目数被退回了。

我实际上打开了一个关于.count()的问题,因为在正常的Mongo中你可以这样做:.count({'applySkipLimit': true});这将考虑到你的跳过和你的限制。

无论如何,那是你的问题。