[英]Javascript add each part of username to keywords array for web-socket queries?
我正在尝试使用 websocket 事件添加用户用户名的关键字以便更快地查询。
在我的 userSchema 中,我将关键字索引设置为 true:
keywords: {
// for live search of username
type: [String],
index: true,
},
例如,如果用户的用户名是“johnsmith”,我需要使用以下内容保存一个数组。
user.keywords = [j, jo, joh, john, johns, johnsm, johnsmi, johnsmit, johnsmith]
我将在我的 userSchema.pre('save') 中执行此操作。
下面是我的目标,但我将如何将用户名 append 设置为部件数组,然后设置 user.keywords = 部件? 我是否正确索引 user.keywords 属性?
谢谢!
userSchema.pre(`save`, async function (next) {
const user = this
if (user.isModified(`username`)) {
let parts = []
for (let i = 0; i < user.username.length; i++) {
parts.push(*???*)
}
user.keywords = parts
}
next()
})
正如我所看到的,您正在尝试确保即使搜索了名称的一部分,在从数据库中获取时也会找到它?
您可以只使用正则表达式进行搜索,而不是在数组中写入可能的请求。
User.find({ username: {$regex : `/^${requestedSearch}/`}});
现在,这将为您找到用户名以请求的字符串开头的结果。
如果您的用户名是“Steve”并且您搜索“Ste”,它将从数据库中返回该用户。 您还可以添加区分大小写等选项。
以下是更多信息:https://docs.mongodb.com/manual/reference/operator/query/regex/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.