我目前正在實施一個實時搜索功能在我的應用程序,我遇到了一些我很困惑的行爲。流星酒吧/子行爲
背景是:我的服務器上有兩個來自同一個MongoDB數據庫的訂閱,名爲posts
。
第一訂閱訂閱最新的50個員額,並將數據發送到MiniMongo收集
Posts
。第二次訂閱訂閱用戶輸入的任何搜索匹配的帖子,並將該數據發送到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
的情況。當用戶開始在客戶端上搜索時,功能完美地按預期工作 - 將正確的遊標發送到客戶端。
但是我沒有在我的MongoDB數據庫中看到postsSearch
,同樣,PostsSearch
沒有在我自己的其他客戶端上填充。
這是怎麼發生的? self.added("postsSearch", id, fields);
似乎是做什麼的,它可以將光標發送到客戶端,但不能發送到MongoDB數據庫。