猫鼬$ text搜索特定键

时间:2019-03-10 21:28:12

标签: node.js mongoose

我有一个User模式,并设置了一些这样的索引:

UserSchema.index({firstName: 'text', lastName: 'text', city: 'text', area: 'text'});

我想使用$search运算符并根据某些特定键查找数据,例如,我想根据给定的城市或地区查找用户。有可能吗?

例如,我只想在cityarea中进行搜索的下一个查询:

User.find({ $text: { $search: 'London' } }, function (err, doc) {
        if (err) {
            console.log(err);
        } else {
            console.log(doc);
        }
    });

1 个答案:

答案 0 :(得分:1)

在MongoDB中,您最多可以有一个文本索引。

来自mongodb官方文档:

  

重要

     

一个集合最多可以有一个文本索引。

从您在架构中创建的索引中,查询将在firstNamelastNamecityarea中查找“伦敦”,并且它将在所有这些字段中都可以找到London的所有此类文档中。

如果要搜索特定单词,则只能在一个字段中(让我们说city),可以使用regex匹配,并且可以使用区分大小写的匹配来忽略大小写。 / p>

尝试一下:

User.find({city : {$regex : ".*London.*" ,$options:"i"}},function(err,docs){
    ...
})

此处$options : "i"用于区分大小写。 它将在city字段中的任何位置返回所有带有“ london”的文档。

您可以在official mongodb $regex docs中了解有关MongoDB $ regex运算符的更多信息。

注意: 您不能在单个查询中同时使用text-searchingregex matching,而必须根据情况选择一个或多个