2012-04-11 16 views

答えて

2

:サーバー上

  • は、その名前のコレクションは、バックエンドモンゴサーバー上に作成されます。サーバー上でそのコレクションのメソッドを呼び出すと、 は通常のMongo操作に直接変換されます。

  • クライアントでは、Minimongoインスタンスが作成されます。 Minimongoは本質的に純粋なJavaScriptの のMongoのインメモリで非永続的な実装です。このクライアントが動作しているデータベースのサブセットである だけを格納するローカルキャッシュとして機能します。クライアント(検索)の に関するクエリは、 がサーバーと通信することなく、このキャッシュから直接配信されます。

あなたは、クライアント上のデータベース(挿入、更新、削除)への書き込み、 コマンドは同時に、クライアント上ですぐに実行、および、 され、それがサーバーにアップし出荷してもそこに実行です。 これはlivedataパッケージによって処理されます。私が集めることができるものから、クライアントにサーバー

サーバーにクライアントを説明

はlivedataとモンゴ-livedataパッケージです。

https://github.com/meteor/meteor/tree/master/packages/mongo-livedata

https://github.com/meteor/meteor/tree/master/packages/livedata

お役に立てば幸いです。

+0

私がテストしなかったことの1つは、Meteorの* outside *で行われたMongoDBコレクションの挿入がクライアントに伝播されるかどうかということです。 – fadedbee

+0

私はコードをスキミングしましたが、Meteorがコレクションの更新をMongoDBから通知された行は見えません。 – fadedbee

+3

@chrisdew MongoDBに直接レコードを挿入したところ、ブラウザに表示されました。だから私はサーバーが通知を受けると思います。 –

19

この場合、query.observe()が必要です。タグフィールド付きのPostsコレクションがあり、importantタグ付きの投稿が追加されたときに通知を受けたいとします。あなたは、各ブラウザのポストの変更に何かをしたい場合は

http://docs.meteor.com/#observe

// collection of posts that includes array of tags 
var Posts = new Meteor.Collection('posts'); 

// DB cursor to find all posts with 'important' in the tags array. 
var cursor = Posts.find({tags: 'important'}); 

// watch the cursor for changes 
var handle = cursor.observe({ 
    added: function (post) { ... }, // run when post is added 
    changed: function (post) { ... } // run when post is changed 
    removed: function (post) { ... } // run when post is removed 
}); 

あなたは、クライアント上でこのコードを実行することができます。また、重要な投稿が追加されたときにチームに電子メールを送信すると言うと、サーバー上でこれを実行することもできます。

addedおよびremovedは、ドキュメントではなくクエリを参照していることに注意してください。既存のポスト文書を持っていると

Posts.update(my_post_id, {$addToSet: {tags: 'important'}}); 

を実行する場合、これはポストには、クエリ結果に追加取得しているので、「追加」コールバックをトリガします。ドキュメントから

+7

これは非常に良い答えですが、この質問には当てはまりません。私はMeteorがMongoDBからの変更の流れをどのように得るのか、Meteorから変更を得る方法ではないかと尋ねていました。 – fadedbee

3

現在、Meteorは実際には1つのインスタンス/プロセスでうまく動作します。そのような場合、すべてのクエリはこのインスタンスを通過し、それを他のクライアントにブロードキャストできます。さらに、外部クエリによって行われたデータベースの変更について、10秒ごとにMongoDBをポーリングします。スケーラビリティを向上させるための1.0の計画であり、うまくいけば、複数のインスタンスがそれぞれの変更を通知することが可能です。

DerbyJSは、Redis PubSubを使用しています。

関連する問題