SQL LIKE 运算符 允许您搜索带有通配符的字符串。 MongoDB 没有类似的运算符 – $text
运算符 执行更复杂的文本搜索。 但 MongoDB 确实支持与 LIKE 类似的正则表达式查询。
假设您要查找所有用户 email
包含 gmail
,您可以简单地通过 JavaScript 正则表达式搜索 /gmail/
:
const User = mongoose.model(User, mongoose.Schema({
email: String
}));
await User.create([
{ email: sergei@google.com },
{ email: bill@microsoft.com },
{ email: test@gmail.com },
{ email: gmail@google.com }
]);
const docs = await User.find({ email: /gmail/ });
docs.length; // 2
docs.map(doc => doc.email).sort(); // [gmail@google.com, test@gmail.com]
等效地,您可以使用 $regex
操作符。
const docs = await User.find({ email: { $regex: gmail } });
请注意,Mongoose 不会 为 您转义正则表达式中的特殊字符。 如果你想使用 $regexp
对于用户输入的数据,您应该首先使用 escape-string-regexp 或类似的库来处理字符串以转义正则表达式特殊字符。
const escapeStringRegexp = require(escape-string-regexp);
const User = mongoose.model(User, mongoose.Schema({
email: String
}));
await User.create([
{ email: sergey@google.com },
{ email: bill@microsoft.com },
{ email: test+foo@gmail.com }
]);
const $regex = escapeStringRegexp(+foo);
const docs = await User.find({ email: { $regex } });
docs.length; // 1
docs[0].email; // test+foo@gmail.com
// Throws: MongoError: Regular expression is invalid: nothing to repeat
await User.find({ email: { $regex: +foo } });
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容