我如何在猫鼬上使用"LIKE"运算符?

dev*_*ext 13 mongoose mongodb node.js

当我使用mongoose进行查询时,我遇到了问题.I编码遵循此Mongoose.js:按用户名LIKE值查找用户.但它返回空白.

我的代码返回空白.

 var promise = UserSchema.find({name: /req.params.keyword/ }).limit(5);
Run Code Online (Sandbox Code Playgroud)

我试过这个回归空白似乎.

var n = john; var promise = UserSchema.find({name: /n/ }).limit(5);

但我试过这是有效的

 var promise = UserSchema.find({name: /john/ }).limit(5);
Run Code Online (Sandbox Code Playgroud)

为什么我使用变量然后返回空白?

kum*_*esh 26

$regex在mongodb中使用

如何使用正则表达式

select * from table where abc like %v%
Run Code Online (Sandbox Code Playgroud)

在蒙戈

 var colName="v";
 models.customer.find({ "abc": { $regex: '.*' + colName + '.*' } },
   function(err,data){
         console.log('data',data);
  });
Run Code Online (Sandbox Code Playgroud)

你的查询看起来像

var name="john";
UserSchema.find({name: { $regex: '.*' + name + '.*' } }).limit(5);
Run Code Online (Sandbox Code Playgroud)

  • 您是否阅读过文档[如何使用正则表达式](https://docs.mongodb.com/manual/reference/operator/query/regex/)?你需要使用 `{ <field>: { $regex: 'pattern', $options: '<options>' } }` 和选项 `i`,例如 `{ name: { $regex: req.params.keyword, $options: 'i' } }` (4认同)
  • `i` 用于不区分大小写 (2认同)

Nux*_*Nux 16

或者只是简单地

const name = "John"
UserSchema.find({name: {$regex: name, $options: 'i'}}).limit(5);
Run Code Online (Sandbox Code Playgroud)

i不区分大小写


小智 8

这就是我如何查找名称/电子邮件中是否存在搜索字符串的方法。希望它可以帮助某人。

const getPeerSuggestions = async (req, res, next) => {

  const { search } = req.query;
  const rgx = (pattern) => new RegExp(`.*${pattern}.*`);
  const searchRgx = rgx(search);

  const peers = await User.find({
    $or: [
      { name: { $regex: searchRgx, $options: "i" } },
      { email: { $regex: searchRgx, $options: "i" } },
    ],
  })
    .limit(5)
    .catch(next);

  res.json(peers);
};
Run Code Online (Sandbox Code Playgroud)


use*_*025 5

您可以使用RegExp对象创建带有变量的正则表达式,如果希望搜索不区分大小写,请添加“ i”标志。

const mongoose = require('mongoose');
const User = mongoose.model('user');

const userRegex = new RegExp(userNameVariable, 'i')
return User.find({name: userRegex})
Run Code Online (Sandbox Code Playgroud)