web-dev-qa-db-ja.com

Meteorコレクションを名前で取得する

私が書いたとしましょう:

_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が存在する場合はそれを使用したいと思います。

24
Trevor Burnham

私が見る限り、collection.js source現在、サーバーで既に初期化されている既存のコレクションを名前で取得する方法はAPIにありません。その機能を追加するのはおそらく難しいことではないでしょう。

だから、Meteorをフォークしてパッチを送信するか、スマートパッケージを作成して共有してみませんか?同じ機能を望んでいる人は他にもいるはずです。

3
limeyd

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
};
15
user2014160

そのパッケージを見つけました: 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

それが役立つことを願っています

12
c.censier

この機能は2016年2月にMeteorに追加されました: "クライアント上のストアからコレクションにアクセスする方法を提供する"

それはこのように動作します:

Meteor.connection._stores['tasks']._getCollection();

そして、JavaScriptコンソールを使用して挿入をテストするために次のように使用していました。

Meteor.connection._stores['tasks']._getCollection().insert({text:'test'});

挿入の場合、insecureパッケージをインストールする必要があります。そうしないと、アクセス拒否メッセージが表示されます。

11
malhal

それらには戻り値があるので、あなたはただすることができることに注意してください

_var Patterns = new Meteor.Collection("patterns");
_

Patternseverywhereを使用します。

また、サーバーの更新をサブスクライブする必要がある場合は、_"patterns"_をMeteor.subscribe()に指定します。


複数のコレクションに同じコードがある場合、ソフトウェアエンジニアリングの観点から何か間違ったことをしている可能性が高くなります。 typeフィールド(またはドキュメントを区別する他の何か)を持つ単一のコレクションを使用して、複数のコレクションを使用する代わりにそれを使用してみませんか?

1
Tamara Wijsman

https://github.com/dburles/mongo-collection-instances を使用すると、Mongo.Collection.get('collectionname')を使用できます

挿入するパラメーターは、コレクションの作成時に使用するパラメーターと同じであることに注意してください。したがって、const Products = new Mongo.Collection('products')を使用している場合は、get('products')(小文字)を使用する必要があります。

1
Lukasvan3L

見るのではなく、私はただやっています:

Foos = new Meteor.Collection("foos");

または、別のオブジェクト内に配置することもできます。私は実際にはCollectionsコレクションオブジェクトを作成していません。

0
Josh