Mongoose - 如何搜索部分字符串匹配,然后按分数对结果进行排序?

时间:2016-07-24 16:06:08

标签: node.js mongodb express search mongoose

我正在使用Node,Express,Mongoose和Mongodb为Web应用创建后端。我尝试使用名称字段和标签数组对某些用户配置文件进行部分搜索,以便" re"将返回包含标签数组或名称的配置文件,其中包含" red"和"蓝色"将返回包含标签数组或名称的配置文件,其中包含" blue"

我找到了添加正则表达式的语法。有点像:

    Profile.find(.0
        { "tags": { "$regex": "re", "$options": "i" } },
        function(err,docs) { 
            str = JSON.stringify(docs, null, 4); 
            console.log(str)
        } 
    );

我也试图对它们进行评分并对结果进行排序。我找到了另一个堆栈溢出帖子:

Profile.find({ "$text": { "$search": input } })
    .select({ "score": { "$meta": "textScore" } })
    .sort({ "score": { "$meta": "textScore" } })
    .exec(function(err,result) {
str = JSON.stringify(result, null, 4); 
console.log(str)
    }
);

但是在阅读完文档之后,我对如何将这两个概念结合起来仍然模糊不清。有小费吗?

1 个答案:

答案 0 :(得分:0)

{tag:/ re / i}将返回红色,但正则表达式无法使用蓝色,因为它比蓝色更长。全文索引不会搜索部分单词。

我们刚刚使用昵称实现了全文搜索,这对于美国名字非常有用。所以有人打字'bob',然后我们带回Rob,Robert等。如果那是你想要做的,我可以分享信息。