2017-03-22 4 views
0

Meteor Docsのために、 'サーバー側'、 'クライアント側'および 'ローカル'のコレクションがあります。実行中のアプリで 'ステータス'(サーバー側、クライアント側、ローカルなど)を変更する方法はありますか?Meteor Appを実行しているときにMongoDB Collectionをローカルからサーバー側に変更

使用例:ユーザーが登録してログインできるWebアプリケーション。彼らは賢明なデータを保存することができます。ユーザーの個人的な好みに応じて、データがローカルに保存されているのかサーバーに保存されているのかを選択することができます。

現在のアプローチ:コレクションローカルCollectionName = new Mongo.Collection(null);またはサーバー側CollectionName = new Mongo.Collection('collectionName');のいずれかをインスタンス化するとうまくいきます。 しかし、ユーザーにコレクションのステータスを変更できるようにするアプローチは考えられません。

これを行う方法はありますか? 回避策が必要です(たとえば、ローカルとサーバー側のCollactionの両方を作成し、挿入/更新/検索に使用するコードを決定するなど)。

編集:私は、自分のデータがサーバと同期されているコレクションに格納されているかどうか、または同期しないコレクションを選択できるようにしたいと考えています。

答えて

1

いいえ、実行中のアプリでコレクションのタイプを変更することはできません。

これらの用語が何を意味するのか混乱していると思います。 「クライアント側」のコレクションは、ローカルストレージに永続的に格納されません。それは、ブラウザのメモリ内にのコレクションであることを意味します。 「サーバ側」のコレクションは、サーバのメモリ内にのものがあるのと同じようにです。相違点は定義方法ではなく、コードが実行される場所です。ほとんどのコレクションには、クライアント側とサーバー側の対応があり、pub/subを介して同期が維持されます。サーバ側のコレクションもMongoDBと同期されます(oplogを使用)。

ローカルコレクションは両方の場所に置くことができますが、「ローカル」は何にも同期していないことを意味します。

0

おそらくあなたがしようとしていることを完全に理解していないかもしれませんが、ローカルコレクションはデータを保持しません。

名前にnullを渡すと、ローカルコレクションが作成されます。どこにも同期されません。 Mongoスタイルの検索、挿入、更新、削除操作をサポートするローカルのスクラッチパッドです。 (クライアントとサーバーの両方で、このスクラッチパッドはMinimongoを使用して実装されます。)

これは、ユーザーがブラウザを閉じたときには、1つを使用していない限り、クライアント上でそれらに追加されたデータは、(吹き飛ばされることを意味しますlocal collection persist meteor packages)、流星の再起動時にサーバー上に追加されたデータは吹き飛ばされます。だから私はあなたが本当に地元のコレクションを使いたいとは思わない。

代わりに、私は(名前は、コンストラクタに渡された)通常のコレクションと、標準allowdenyオプション(not really recommendedもう...しかしまだ有効なアプローチ)または流星法(好ましい方法)を使用します誰がデータを変更でき、どのデータを変更できるかを制御します。

また、別のオプションとして、パブリッシュ関数に、そのセッションでクライアントで表示したいフィールドのリストを渡すこともできます。これを行うにはdisplayFields引数を受け取った新しいパブリケーションを定義し、それをコレクションのフィールド指定オプションとして使用します.find()

クライアント側では、これを購読して、ユーザーがクライアントに表示させたいフィールドを渡します。

var displayFields = { 
    firstname: 1, 
    lastname: 0, 
    //... 
}; 

this.subscribe("userData", [displayFields]); 
+0

'許可/ deny'ルールは公式[メテオガイド](https://guide.meteor.com/security.html#allow-deny)によって推奨されていませんのでご注意ください。 – aedm

+0

それを私の注目に持ってくれてありがとう!私は個人的に 'allow/deny'を決して使用せず、コレクションデータの変更を実装するために常にメソッドを使用しますが、これが公式のガイダンスであることを認識しませんでした。私はこれを指摘するために私の答えを更新します。 – jordanwillis

+0

私はあなたが実際に私の質問を完全に理解していないと思う。しかし、あなたの答えはそれにもかかわらず、[ローカルコレクションの流星パッケージ(https://github.com/jeffmitchel/meteor-local-persist)はおそらく私が欲しいことをするのに役立つでしょう。私は考えをクリアするために私の質問を書こうとします。 – zwif

関連する問題