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

Eri*_*Lee 9 performance database-connection subscriptions meteor

我有一些代码如下所示.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});
    });
 });
Run Code Online (Sandbox Code Playgroud)

Dat*_*sik 16

使用Meteor附带的Mongo API,.count()不考虑Limits,或者Skips你所看到的将是你的收藏中最大的东西.

如果你这样做

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});
});
Run Code Online (Sandbox Code Playgroud)

因此,不是调用.count()而是调用,.fetch()它会从您的集合中返回所选的25个条目,然后调用.length它,您将看到返回了正确的条目数.

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

无论如何,这是你的问题.