現在、アプリにリアルタイム検索機能を実装していますが、混乱している動作に遭遇しました。
背景は次のとおりです。サーバー上の同じ MongoDB データベースから 2 つのサブスクリプションを持っていますposts
。
最初のサブスクリプションは、最新の 50 件の投稿をサブスクライブし、データを MiniMongo コレクションに送信します
Posts
。2 番目のサブスクリプションは、ユーザーが入力した検索に一致する投稿をサブスクライブし、このデータを以下のように MiniMongo コレクションに送信し
PostsSearch
ます。// client Posts = new Mongo.Collection('posts'); PostsSearch = new Mongo.Collection('postsSearch'); // server Meteor.publish('postsPub', function(options, search) { return Posts.find(search, options); }); Meteor.publish('postsSearchPub', function(options, search) { var self = this; var subHandle = Posts.find(search, options).observeChanges({ added: function (id, fields) { self.added("postsSearch", id, fields); } }); self.ready(); });
私の質問は、ドキュメントからわかっていることです:
コレクションを作成するときに名前を渡すと、永続的なコレクション (サーバーに保存され、すべてのユーザーに表示されるコレクション) が宣言されます。クライアント コードとサーバー コードはどちらも、同じ API を使用して同じコレクションにアクセスできます。
ただし、これは当てはまりませんPostsSearch
。ユーザーがクライアントで検索を開始すると、機能は期待どおりに完全に機能し、正しいカーソルがクライアントに送信されます。
ただしpostsSearch
、MongoDB データベースに a が表示されず、同様に、PostsSearch
自分以外のクライアントにもデータが取り込まれていません。
これはどのように起こっていますか?カーソルをクライアントに送信することはself.added("postsSearch", id, fields);
できますが、MongoDB データベースには送信できません。