これに走った(少し厄介な問題)私はコレクション内のすべてのレコードを検索しようとしており、特定のフィールド(スコア)を表示(または表示)していません。これは単なる例であり、実際のコードを反映していませんが、問題は常に再現可能です。除外するフィールドは非常に大きく、使用可能なレコードのメニューを生成しようとしているだけです。
のようなコマンド
players.find({},{score:1})
players.find({},{score:0})
Mongodbでexclude/includeをトリガーするのではなく、常にすべてのフィールドを返します。テンプレートはどのデータをhtmlにレンダリングするかを潜在的に制御できるため、何も心配しませんか?それでも、データはクライアント側に転送されるように感じます。コンソールに表示されます。
あなたの構文は少しずれているはずです
CollectionName.find({}, {fields: {'onlyThisField':1}});
または
CollectionName.find({}, {fields: {'everythingButThisField':0}});
テンプレートは実際に表示するデータを制御しますが、フィールド制限が意味をなすシナリオはまだ多くあります-データのプライバシーまたは効率(すべてのレコードの一部のフィールド、「現在の」レコードのすべてのフィールド)は2つの一般的なものです
あなたはそれを言及しませんでしたが、これは通常公開関数内です- http://docs.meteor.com/#meteor_publish を参照-fields
修飾子もクライアントで利用可能です、ただし、クライアントに送信されるデータはテンプレートだけに制限されません-サーバー側のフィールド削減/選択にはさまざまな利点があります
-
autopublish
パッケージも削除したことを再確認してください。ただし、アクティブな場合は警告が表示され、fields
を最もよく使用する独自の発行関数を記述します。
最初に、Collection.find()
のいくつかのフィールドを制御したい場合は、次の方法で実行できます。
CollectionName.find({}, {fields: {field:1}});
しかし、それはサーバー上でのみ機能していました。
またはこれを試してください:
サーバー上:
Meteor.publish("myCollection", function () {
return SvseTree.find({},{fields: {field:1}});
});
クライアントで:
Meteor.subscribe("myCollection");
次にmeteor remove autopublish
を実行します。
第二に、Collection.find()の配列を取得したい場合は、それを試してください:Collection.find()。fetch();