如何搜索FS Collection?

时间:2015-08-11 15:36:57

标签: javascript search meteor collectionfs

有人可以帮我解决这个问题吗?我有一组PDF文档,我希望能够搜索。 我尝试过使用matteodem:easy-search和meteorhacks:search-source,但它们都只处理Meteor Collections而不是FS。我可以让这两个包使用常规文本。我只想根据FS Collection中的名称字段返回搜索查询的结果。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

  1. 如果您还没有使用reactive-var和reactive-dict软件包,请安装
  2. 创建一个反应变量(它也可以是Session变量)searchString
  3. 将您的项目显示包裹在{{#each chosenFiles}}chosenFiles是您的帮助名称。
  4. 创建一个帮助器chosenFiles,您可以在其中调用搜索功能并从文件集中为其提供游标。

    "chosenFiles": function() {
        return filterFiles(yourFileCollection.find());
    }
    
  5. 创建filterFiles功能,基本上,您可以取回searchString并使用它来过滤结果,如果searchString为空则返回所有内容。以下是使用reactive-dict的示例:

    var pageSession = new ReactiveDict();
    
     filterFiles= function(cursor) {
        if(!cursor) {
            return [];
        }
        var searchString = pageSession.get("SearchString");
        var raw = cursor.fetch();
    
        // filter
        var filtered = [];
        if(!searchString || searchString == "") {
            filtered = raw;
        } else {
            searchString = searchString.replace(".", "\\.");
            var regEx = new RegExp(searchString, "i");
            var searchFields = ["original.name", "original.type"];
            filtered = _.filter(raw, function(item) {
                var match = false;
                _.each(searchFields, function(field) {
                    var value = (getPropertyValue(field, item) || "") + "";
                    match = match || (value && value.match(regEx));
                    if(match) {
                        return false;
                    }
                })
                return match;
            });
        }
        return filtered;
    };
    
  6. searchString定义附加到您的keyUp事件,以便获得被动搜索。

    "keyup .yourTextBox": function(e, t) {
        var searchString = e.currentTarget.value;
        switch (e.which) {
            //pressing esc clear the textbox
            case 27:
            e.currentTarget.value = "";
            pageSession.set("SearchString", "");
            break;
    
            default:
            pageSession.set("SearchString", searchString);
    }
    
  7. 我不是100%确定“original.name”是访问name字段的正确方法,因为我不使用collectionFS,但似乎是according to the doc