9

我有一些代码,如下所示。我在 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});
    });
 });
4

1 回答 1

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});
});

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

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

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

于 2014-12-29T10:32:50.300 回答