javascript - Nodejs 并使用 moongose 改进搜索
问题描述
我希望能够在 db 中更自由地搜索字符串。例如,我存储姓名和姓氏,如“Joe Doe”。
我希望能够在这样的字符串中找到他:Jo,Joe,Do,Doe,Joe Do,Jo Do,Do Jo,Doe Joe 如果有像 Johe doe 这样的拼写错误。
我使用 moongose 来处理我的 atlas DB (mongoDB)。
这就是我现在所拥有的:
const aggregate = [
{
$match: {
category: { $regex: `${body.category}`, $options: 'i' },
},
}, {
$match: {
name: { $regex: `${body.search}`, $options: 'i' },
},
}
];
connectToDatabase().then(() => {
Names.aggregate(aggregate)
.then((name) =>
callback(null, {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
},
body: JSON.stringify(name),
})
)
.catch((err) =>
callback(null, {
statusCode: err.statusCode || 500,
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'text/plain',
},
body: 'Could not find.',
})
);
});
解决方案
您需要将正则表达式传递给 Mongoose 模型中的 find 方法。假设您的模型是User
,您需要搜索以下内容Jo
:
const findUsersLikeJo = async () => {
const users = await User.find({name: /Jo/i})
console.log( findUsersLikeJo() )
}
这就是核心思想。将其添加到您的具体情况。在这里查看更多示例:https ://mongoosejs.com/docs/api.html#model_Model.find
推荐阅读
- hyperledger-fabric - 什么是超级账本结构链文件?我在哪里可以买到?
- gemfire - geode oql 按字符串和 to_date 排序
- spring - java.lang.AssertionError: Status expected:<200> but was:<400> for Spring Boot Rest Controller Patch request
- java - 如何解析作为 REST 请求中的查询参数接收的函数?
- tensorflow - 如何将层添加到与检查点中的变量相关的预训练模型?
- kettle - PDI Kettle 表输入步骤如何加载数据?
- java - Java CookieManager 或 CookieHandler 过期了吗?
- machine-learning - 为图像集创建 LMDB
- jar - 如何使用 Javalite 框架作为独立的 http 构建可运行的 JAR?
- angular - 覆盖 aspnetboilerplate app.component.html