我的用户模型架构为
const userSchema = new mongoose.Schema(
{
firstname: {
type: String,
required: true,
trim: true
},
lastname: {
type: String,
trim: true
},
email: {
type: String,
unique: true,
required: true,
trim: true,
lowercase: true
},
password: {
type: String
},
phone: {
type: Number,
trim: true,
unique: true,
sparse: true
}
});
我为多个字段(名字,姓氏,电子邮件)中的文本搜索创建了索引
userSchema.index({firstname: 'text', lastname: 'text', email: 'text'}, {default_language: 'none'});
现在我正在用户中搜索“ alex”-
const result = await User.find({$text : { $search: 'alex' }}).skip(1).limit(1);
当我搜索整个词(例如“ alex”)时我得到了结果,但是如果我搜索“ al”,那么我什么都没得到。
因此,当我搜索“ al”这样的部分单词时,我想得到结果,然后在结果中也得到“ alex”记录。
有人建议使用
let searchText = "l";
let condition = { $or: [{ firstname: new RegExp("^" + searchText, "i") }, { lastname: new RegExp("^" + searchText, "i") }] }
const result = await User.find(condition);
它工作正常,但仍然无法解决一个问题,例如我有一个名字为'alex'的文档,如果我搜索'le',那么我也应该获得此文档。
答案 0 :(得分:1)
您可以这样使用:
let searchText = "al";
let condition = { $or: [{ firstname: new RegExp("^" + searchText, "i") }, { lastname: new RegExp("^" + searchText, "i") }] }
const result = await User.find(contition).skip(1).limit(1);