私が書いたとしましょう:
_new Meteor.Collection("foos");
new Meteor.Collection("bars");
_
それらのコレクションに名前でアクセスするためのAPIはありますか? Meteor.Collection.get(name)
のようなもの。ここで、name
は_"foos"
_または_"bars"
_ですか?私は私が次のようなものを書くことができることを知っています
_var MyCollections = {
foos: new Meteor.Collection("foos");
bars: new Meteor.Collection("bars");
}
_
次に_MyCollections[name]
_を使用しますが、既存のAPIが存在する場合はそれを使用したいと思います。
私が見る限り、collection.js
source現在、サーバーで既に初期化されている既存のコレクションを名前で取得する方法はAPIにありません。その機能を追加するのはおそらく難しいことではないでしょう。
だから、Meteorをフォークしてパッチを送信するか、スマートパッケージを作成して共有してみませんか?同じ機能を望んでいる人は他にもいるはずです。
Shane Donelleyのmongoinspectorに基づく https://github.com/shanedonnelly1/mongoinspector
getCollection = function (string) {
for (var globalObject in window) {
if (window[globalObject] instanceof Meteor.Collection) {
if (globalObject === string) {
return (window[globalObject]);
break;
};
}
}
return undefined; // if none of the collections match
};
そのパッケージを見つけました: https://github.com/dburles/mongo-collection-instances/
それはあなたがすることを可能にします
Foo1 = new Mongo.Collection('foo'); // local
Foo2 = new Mongo.Collection('foo', { connection: connection });
Mongo.Collection.get('foo') // returns instance of Foo1
Mongo.Collection.get('foo', { connection: connection });
// returns instance of Foo2
それが役立つことを願っています
この機能は2016年2月にMeteorに追加されました: "クライアント上のストアからコレクションにアクセスする方法を提供する"
それはこのように動作します:
Meteor.connection._stores['tasks']._getCollection();
そして、JavaScriptコンソールを使用して挿入をテストするために次のように使用していました。
Meteor.connection._stores['tasks']._getCollection().insert({text:'test'});
挿入の場合、insecure
パッケージをインストールする必要があります。そうしないと、アクセス拒否メッセージが表示されます。
それらには戻り値があるので、あなたはただすることができることに注意してください
_var Patterns = new Meteor.Collection("patterns");
_
Patterns
everywhereを使用します。
また、サーバーの更新をサブスクライブする必要がある場合は、_"patterns"
_をMeteor.subscribe()
に指定します。
複数のコレクションに同じコードがある場合、ソフトウェアエンジニアリングの観点から何か間違ったことをしている可能性が高くなります。 type
フィールド(またはドキュメントを区別する他の何か)を持つ単一のコレクションを使用して、複数のコレクションを使用する代わりにそれを使用してみませんか?
https://github.com/dburles/mongo-collection-instances を使用すると、Mongo.Collection.get('collectionname')
を使用できます
挿入するパラメーターは、コレクションの作成時に使用するパラメーターと同じであることに注意してください。したがって、const Products = new Mongo.Collection('products')
を使用している場合は、get('products')
(小文字)を使用する必要があります。
見るのではなく、私はただやっています:
Foos = new Meteor.Collection("foos");
または、別のオブジェクト内に配置することもできます。私は実際にはCollectionsコレクションオブジェクトを作成していません。