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/