17

私は数ヶ月前に質問をしましたが、Meteorが答えを持っているようです。

クエリ結果セットに*変更*のストリームを提供できるNoSQLデータベースがある場合はどれですか?

MeteorはMongoDBクエリの結果の更新をどのように受け取りますか?

ありがとう、

クリス。

4

3 に答える 3

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'}});

投稿がクエリ結果に追加されるため、これにより「追加」コールバックがトリガーされます。

于 2012-04-11T18:32:39.840 に答える
3

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

一方、DerbyJSはRedisPubSubを使用しています。

于 2013-03-01T09:10:41.127 に答える
2

ドキュメントから:

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

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

クライアントでデータベースに書き込む(挿入、更新、削除)と、コマンドはクライアントですぐに実行され、同時にサーバーに送られ、そこでも実行されます。livedataパッケージがこれを担当します。

それはクライアントからサーバーへの説明です

私が収集できるものからクライアントへのサーバーは、livedataおよびmongo-livedataパッケージです。

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

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

お役に立てば幸いです。

于 2012-04-16T15:21:43.320 に答える