javascript - Meteor 中用于搜索和显示文档的标准模式

标签 javascript mongodb search meteor

假设我有一个 Meteor 站点,我想要一个功能来搜索集合中的文档并将其显示给用户。

该集合非常大,无法将所有内容保留在客户端上。

我有一个发布语句,指定需要将哪些文档推送给用户。

Meteor.publish('listing', function (search) {

    return TestObjs.find({"name": search });

});

我有一个搜索输入文本框,当它发生变化时,我想订阅该出版物以获取我需要的记录。

'change #searchText' : function(e,t){
    Session.set("searchTerm", $("#searchText").val());
    Meteor.subscribe("listing", $("#searchText").val());

}

因此,每次我搜索文本时,客户端都会收到需要显示的文档。

问题是,订阅调用不会从客户端删除以前搜索词的任何旧文档。所以第一个问题是用户使用搜索功能越多,客户端上存储的文档就越多。其次,如果我想显示当前搜索词的搜索结果,我不能直接走

Template.home.helpers({
    listOfObjs: function () {
        return TestObjs.find().fetch();
    }
});

这将返回客户端上的所有记录,即与当前和任何先前搜索词匹配的所有记录。

我必须复制发布声明

Template.home.helpers({
    listOfObjs: function () {
        return TestObjs.find({"name": Session.get("searchTerm") }).fetch();
    }
});

这可行,但我本质上是在多个地方复制逻辑。这只是一个简单的例子,但如果我的搜索算法因分页等而变得更复杂怎么办?

所以我想知道,推荐的 Meteor 方式是什么来返回服务器上集合的搜索结果?

最佳答案

不试就回答。希望您正在寻找这个。

    var list;
    'change #searchText' : function(e,t){
        Session.set("searchTerm", $("#searchText").val());

        if (list)
          list.stop();

        list = Meteor.subscribe("listing", $("#searchText").val());

    }

来自doc

stop() 取消订阅。这通常会导致服务器指示客户端从客户端缓存中删除订阅的数据。

关于javascript - Meteor 中用于搜索和显示文档的标准模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32071522/

相关文章:

javascript - BMI 计算器 英尺 到 英寸 转换错误

Javascript:使用 {x} api 获取当前 GPS 位置?

javascript - 使用 Mongoose 在 Node.js 中存储一对多关系

javascript - 如何创建一个脚本,给出一个网站列表,并使用其搜索功能来获取信息?

c - 测试二分查找的平均运行时间

javascript - 在 JavaScript 中迭代 MooTools JSONP 输出

javascript - 更改 anchor 以指向页面的 data-url 属性?

node.js - MongoDB 和 Node.js 中的动态查询

node.js - 如何在 mongoose 中查找最新的子文档

algorithm - 快速计算圆内的点数