我目前正在我的应用程序中实现实时搜索功能,我遇到了一些我很困惑的行为。
背景是:我的服务器上有两个来自同一个 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
。当用户开始在客户端上搜索时,该功能按预期完美运行 - 正确的光标被发送到客户端。
postsSearch
但是,我在我的 MongoDB 数据库中看不到 a ,同样,PostsSearch
除了我自己的客户端之外,也没有填充任何其他客户端。
这是怎么回事?看起来这样做是self.added("postsSearch", id, fields);
它能够将光标向下发送到客户端,但不能发送到 MongoDB 数据库。