Nodejs mongoose 如何模糊查询?

Nodejs mongoose 如何模糊查询?

mongoose 的模糊查询看官方有一段:

MyModel.find({ name: /john/i }, 'name friends', function () { })

自己的:

var query = User.find({'USER_NAME':/yycc/}); //我是想查询USER_NAME 包含yycc 的

但是mongodb 查看查询语句的时候 他把mongoose 把/yycc/当做字符串去查询了。


6 回复

当然可以。在 Mongoose 中进行模糊查询可以通过正则表达式来实现。您提到的情况可能是由于正则表达式的格式或使用方式有误导致的。下面我将详细解释如何正确地使用正则表达式来进行模糊查询,并提供一些示例代码。

示例代码

假设我们有一个 User 模型,其中包含一个 USER_NAME 字段。我们需要查询 USER_NAME 包含 “yycc” 的所有用户记录。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 定义 User 模型
const userSchema = new Schema({
    USER_NAME: String,
});

const User = mongoose.model('User', userSchema);

// 使用正则表达式进行模糊查询
async function findUsersByNamePart(namePart) {
    try {
        const regex = new RegExp(namePart, 'i'); // 创建正则表达式,'i' 表示不区分大小写
        const users = await User.find({ USER_NAME: { $regex: regex } });
        console.log(users);
    } catch (error) {
        console.error(error);
    }
}

// 调用函数,传入需要查询的部分名称
findUsersByNamePart('yycc');

解释

  1. 正则表达式的创建:

    • 在上述代码中,我们使用 new RegExp(namePart, 'i') 来创建一个正则表达式。namePart 是我们要搜索的字符串部分,而 'i' 表示不区分大小写。
  2. 查询条件:

    • 我们使用 { USER_NAME: { $regex: regex } } 作为查询条件,其中 $regex 是 MongoDB 提供的一个操作符,用于匹配正则表达式。
  3. 执行查询:

    • User.find() 方法用于执行查询操作,并返回匹配的结果。这里我们使用 await 关键字来等待异步操作完成。
  4. 错误处理:

    • 使用 try...catch 结构来捕获并处理可能发生的错误。

通过这种方式,您可以灵活地对 Mongoose 模型进行模糊查询。希望这些信息能帮助您更好地理解和使用 Mongoose 进行模糊查询。


问题找到了。跟踪了源码看了下,,定义了Schema 它自动会转换成相应的类型,所以需要用到模糊查询的 可以用

Mixed = mongoose.Schema.Types.Mixed

即便你定义的是string类型的,依然可以进行模糊查询 http://mongoosejs.com/docs/api.html#query_Query-regex

查询支持正则的啊

我很早前就觉得正则相当于小型的sql语句。

要在 Mongoose 中进行模糊查询,可以使用正则表达式。你的问题可能出在正则表达式的格式或使用方式上。以下是一个示例,展示如何正确地进行模糊查询。

示例代码

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 假设我们有一个用户模型
const UserSchema = new Schema({
  USER_NAME: String,
});

const User = mongoose.model('User', UserSchema);

// 模糊查询 USER_NAME 包含 "yycc" 的用户
async function findUsersByNamePart() {
  const query = /yycc/;
  const users = await User.find({ USER_NAME: { $regex: query, $options: 'i' } });
  
  console.log(users);
}

findUsersByNamePart().catch(console.error);

解释

  1. 正则表达式: 正则表达式 /yycc/ 用于匹配包含 “yycc” 的字符串。
  2. $regex: 这是 MongoDB 查询中用于正则表达式的操作符。
  3. $options: "i" 表示不区分大小写。

注意事项

  • 确保 USER_NAME 字段类型为 String
  • 使用 $options: 'i' 来实现不区分大小写的查询。
  • 确保 MongoDB 和 Mongoose 的版本支持这些功能。

以上代码应该能帮助你在 Mongoose 中进行模糊查询。如果仍然有问题,请检查 MongoDB 日志或确保数据库中的数据符合预期。

回到顶部