Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何搜索FS集合?_Javascript_Search_Meteor_Collectionfs - Fatal编程技术网

Javascript 如何搜索FS集合?

Javascript 如何搜索FS集合?,javascript,search,meteor,collectionfs,Javascript,Search,Meteor,Collectionfs,有人能帮我吗?我有一组PDF文档,我想能够搜索。 我尝试使用matteodem:easy search和MeteoHacks:search source,但它们都只处理流星收集,而不处理FS。我可以让这两个包都使用常规文本。我只想根据FS集合中的name字段返回搜索查询的结果 "chosenFiles": function() { return filterFiles(yourFileCollection.find()); } 任何帮助都将不胜感激 如果您还没有安装reactive v

有人能帮我吗?我有一组PDF文档,我想能够搜索。 我尝试使用matteodem:easy search和MeteoHacks:search source,但它们都只处理流星收集,而不处理FS。我可以让这两个包都使用常规文本。我只想根据FS集合中的name字段返回搜索查询的结果

"chosenFiles": function() {
    return filterFiles(yourFileCollection.find());
}
任何帮助都将不胜感激

  • 如果您还没有安装reactive var,则安装reactive dict包(如果您还没有安装)
  • 创建一个被动变量(也可以是
    会话
    变量)
    搜索字符串
  • 将项目显示包装在一个
    {{{#each chosenFiles}}
    中,其中
    chosenFiles
    是您的助手名称
  • 创建一个helper
    chosenFiles
    ,在其中调用搜索函数,并从文件集合中为其提供一个光标

    "chosenFiles": function() {
        return filterFiles(yourFileCollection.find());
    }
    
  • 创建
    filterFiles
    函数,在该函数中,基本上可以返回
    searchString
    并使用它过滤结果,如果
    searchString
    为空,则返回所有内容。下面是一个使用反应式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;
    };
    
  • 例如,将
    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);
    }
    

  • 我不能100%确定“original.name”是否是访问名称字段的正确方式,因为我不使用collectionFS,但似乎是这样,

    请在您的问题中包含一个,以便我们可以重现您的问题。请实际阅读链接页面,并确保您在问题中包含的代码是最小的(仅复制问题所需的代码,仅此而已)、完整的(复制问题所需的所有代码,仅此而已)和可验证的(我们应该能够使用您问题中的代码复制问题)。如果没有这个,您的问题对于堆栈溢出来说太广泛了。我必须添加一个新字段。metadata.name,因为original.name不起作用。我试图弄明白为什么FS Collection没有像我预期的那样返回值。非常感谢你的回答。