如何在 mongoDB 或 mongoose 中进行部分搜索?
Posted
技术标签:
【中文标题】如何在 mongoDB 或 mongoose 中进行部分搜索?【英文标题】:How to do partial search in mongoDB or mongoose? 【发布时间】:2020-04-18 22:34:07 【问题描述】:我的用户模型架构是
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”,我也应该得到这个文档。
【问题讨论】:
这能回答你的问题吗***.com/questions/9824010/… 但是如何进行多个字段搜索,就像我想在某些字段(名字、姓氏、电子邮件)中搜索我的搜索查询“al”一样。 查看here 了解新的测试版部分文本搜索功能。 【参考方案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);
【讨论】:
它工作正常,但在一种情况下我没有得到结果——比如用户名是“alex”,如果我搜索“le”,我什么也得不到。以上是关于如何在 mongoDB 或 mongoose 中进行部分搜索?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Mongodb 或 Mongoose 查询并使用 javascript 打印?
MongoDB:如何使用 Mongoose 添加或更新子文档?
MongoDB:异步函数未完成或如何正确关闭与 mongoose 的连接
如何在运行 Mongodb 的 Mongoose 中执行脚本?