Search 不带正则表达式的Mongoose部分字段搜索
假设我有这个模式:Search 不带正则表达式的Mongoose部分字段搜索,search,mongoose,Search,Mongoose,假设我有这个模式: var mongoose = require("mongoose") var userSchema = new mongoose.Schema({ name: {type: String}, // other fields }, { collation: { locale: "en_US", strength: 1 } }); 我使用排序规则,因此搜索不区分大小写 那么假设我有一个名为“Dave”的文档 然后,我寻找它,但没有写下整个单词 var userLis
var mongoose = require("mongoose")
var userSchema = new mongoose.Schema({
name: {type: String},
// other fields
}, { collation: { locale: "en_US", strength: 1 } });
我使用排序规则,因此搜索不区分大小写
那么假设我有一个名为“Dave”的文档
然后,我寻找它,但没有写下整个单词
var userList = {
.find({name: "da"})
.exec();
}
我如何在不使用正则表达式的情况下实现这一点?这些都很慢。我尝试过使用$text方法进行索引和搜索,但我不知道如何使其只搜索文档中的特定字段。我相信使用REGEX是最好的解决方案。你要做的就是真正的正则表达式的设计目的。是的,它很慢,但是你尝试实现的任何其他选项都可能会比较慢 创建文本索引并使用
$text
仅用于匹配全文,因此您不能使用此方法
如果你真的很绝望,真的不想使用正则表达式,你可以试试别的。。。尝试创建和存储对象,并在文档中使用每个可能的子字符串。对象查找是O(1)倍,这意味着它将更快,但折衷是您在数据库中存储了大量数据。如果你同意,那就试试看
例如,让我们使用Dave
。存储的对象可能如下所示:
{
"d": 1,
"da": 1,
"dav": 1,
"dave"" 1
}
我们可以将此对象存储在名为子字符串
的字段中。然后,当我们执行数据库查找时,它非常简单:
User.find({'substrings.da':{$exists:true}})
请考虑使用正则表达式…它是如此的简单,如此的干净,它的设计正是为了你想要的
{
"d": 1,
"da": 1,
"dav": 1,
"dave"" 1
}