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

时间:2017-05-02 02:36:47

标签: node.js mongodb mongoose

我在使用mongoose进行查询时遇到问题。我的编码遵循此Mongoose.js: Find user by username LIKE value。但它返回空白。

我的代码返回空白。

 var promise = UserSchema.find({name: /req.params.keyword/ }).limit(5);

我试过这个返回空白似乎。

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

但我试过这是有效的

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

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

6 个答案:

答案 0 :(得分:18)

在mongodb中使用$regex

how to use regex

示例

select * from table where abc like %v%

在mongo

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

您的查询类似

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

答案 1 :(得分:1)

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

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

const userRegex = new RegExp(userNameVariable, 'i')
return User.find({name: userRegex})

答案 2 :(得分:1)

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

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);
};

答案 3 :(得分:0)

或者只是

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

i (不区分大小写)

答案 4 :(得分:0)

如果没有 aggregate,它对我不起作用。但这确实做到了:

db.dbname.aggregate([{ "$match" : {"name" : { $regex: '.*SERGE.*', $options: 'i' } }}, { $sort: { "createdTime" : -1 }} ]).pretty()

答案 5 :(得分:0)

您可以使用 RegExp 使用动态值运行正则表达式查找:

 var promise = UserSchema.find({name: new RegExp(req.params.keyword, 'i') }).limit(5);

注意不区分大小写的 'i' 选项。