9

以下に示すようなコードがあります。Mongo のキーワード コレクションには、約 60K のエントリがあります。私は本当にトップ25が欲しいので、検索の制限を設定しようとしています. 同じクエリを実行して、結果の数を出力しています。なんらかの理由で、ログ メッセージに 60K 程度と表示されているため、制限が機能していないようです。

このようなことはありえないのでしょうか?クライアント側で機能する制限を設定することはできますが、送信されるデータが少なくなるように、サーバー上のものを制限しようと考えました。

いくつかの追加情報:

  • meteor が提供するものではなく、独自の 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});
});

したがって、コレクションから選択した 25 エントリを返す呼び出しの代わりに呼び出す代わりに、それを呼び出す.count()と、正しい数のエントリが返されたことがわかります。.fetch().length

私は実際に .count() に関する問題を開きました。これは、通常の Mongo では次のことができるためです.count({'applySkipLimit': true});。スキップと制限が考慮されます。

とにかく、それはあなたの問題です。

于 2014-12-29T10:32:50.300 に答える