Javascript 将用户名的每个部分添加到关键字数组以进行网络套接字查询?
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') 中这样做。
下面是我要做的,但是我如何将用户名附加到 parts 数组然后设置 user.keywords = parts?我是否正确索引了 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”,它会return 数据库中的那个用户。
您还可以添加区分大小写等选项。
这里有更多信息:https://docs.mongodb.com/manual/reference/operator/query/regex/
我正在尝试添加用户用户名的关键字,以便使用 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') 中这样做。
下面是我要做的,但是我如何将用户名附加到 parts 数组然后设置 user.keywords = parts?我是否正确索引了 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”,它会return 数据库中的那个用户。 您还可以添加区分大小写等选项。
这里有更多信息:https://docs.mongodb.com/manual/reference/operator/query/regex/