首页 > 解决方案 > 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.',
        })
      );
  });

标签: javascriptnode.jsmongoose

解决方案


您需要将正则表达式传递给 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


推荐阅读