我有一个User
模式,并设置了一些这样的索引:
UserSchema.index({firstName: 'text', lastName: 'text', city: 'text', area: 'text'});
我想使用$search
运算符并根据某些特定键查找数据,例如,我想根据给定的城市或地区查找用户。有可能吗?
例如,我只想在city
和area
中进行搜索的下一个查询:
User.find({ $text: { $search: 'London' } }, function (err, doc) {
if (err) {
console.log(err);
} else {
console.log(doc);
}
});
答案 0 :(得分:1)
在MongoDB中,您最多可以有一个文本索引。
来自mongodb官方文档:
重要
一个集合最多可以有一个文本索引。
从您在架构中创建的索引中,查询将在firstName
,lastName
,city
和area
中查找“伦敦”,并且它将在所有这些字段中都可以找到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-searching
和regex matching
,而必须根据情况选择一个或多个