2013-02-26 14 views
9

以下に示すコードがあります。 Mongoのキーワードコレクションには約60,000件のエントリがあります。私は本当にトップ25を欲しがるので、私は限界を見つけることを試みている。私は同じ数の結果を印刷するために同じクエリを実行しています。なんらかの理由で、ログメッセージに60Kほどのメッセージが表示されるため、制限が機能していないようです。サーバ側のメテオの結果の数を制限しますか?

このようなことはできませんか?私は動作するクライアント側の制限を設定することができますが、私はサーバー上のものを制限しようとすると、より少ないデータしか送信されないと考えました。追加情報の

数ビット:私は私自身のモンゴデータベースを使用してい

  • 、流星によって提供されていない1。 ENV変数でそれを指して
  • バージョン0.5.7

すべてのヘルプがいただければ幸いです。流星が付属していますモンゴのAPIで

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

ああ、私はそれを見つけたと思う、私は_idフィールドを自分で使っていた。私はデフォルトを使用するように私のコードを変更し、すべてが今働くようです。私は流星を使うときに_idだけを残すことを忘れないでください。 –

+6

こんにちはエリック、答えとして解決策を貼り付けて質問を閉じることはできますか?それともまだ助けが必要でしたか? – cmather

+0

私が気付くことの一つは、あなたがconsole.logステートメントでソートしていることです。カウントをしているだけであればソートする必要はありません。 –

答えて

16

.count()は何を見ていることは常にあなたのコレクションで物事の最大量になるだろうので、考慮Limitsに入れ、またはSkipsしません。

ますので、代わりに.count()を呼び出して、代わりにあなたがそれに.lengthを呼び出して、あなたのコレクションから選ばれた25個のエントリを返し.fetch()を呼び出すのは、エントリの正確な数があっ

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({'applySkipLimit': true});があなたのスキップとあなたの制限を考慮しているので、私は実際に.count()に関する問題を開いた。

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