【问题标题】:Limit number of results in Meteor on the server side?在服务器端限制 Meteor 中的结果数量?
【发布时间】:2013-02-12 06:53:03
【问题描述】:

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

这种事情不可能吗?我可以在客户端设置一个有效的限制,但我想我会尝试限制服务器上的东西,这样发送的数据就会更少。

一些附加信息:

  • 我用的是我自己的Mongo数据库,不是meteor提供的;用 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});
    });
 });

【问题讨论】:

  • 啊,我想我找到了,我自己使用了 _id 字段。我将代码更改为使用默认值,现在一切似乎都正常了。我会记得在使用流星时不要管 _id。
  • 您好 Eric,您介意将解决方案粘贴为答案并结束问题吗?还是您还需要帮助?
  • 我注意到的一件事是您在 console.log 语句中进行排序。如果您只是进行计数,则没有理由进行排序。

标签: performance meteor database-connection subscriptions


【解决方案1】:

使用 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}); 这将考虑到你的跳过和你的限制。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2017-08-24
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多