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

Posted

技术标签:

【中文标题】如何在猫鼬上使用“LIKE”运算符?【英文标题】:How I can use "LIKE" operator on mongoose? 【发布时间】:2017-09-29 11:08:43 【问题描述】:

我在使用 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);

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

【问题讨论】:

/.../ 语法仅适用于字符串,不适用于变量。您链接的问题中的许多答案都提供了您的答案。 【参考方案1】:

在mongodb中使用$regex

how to use regex

例子

select * from table where abc like %v%

在蒙哥中

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

【讨论】:

感谢您的回答。上面的 find 区分大小写。我如何在不区分大小写的情况下做到这一点? 您是否阅读过文档how to use regex?您需要使用 <field>: $regex: 'pattern', $options: '<options>' 和选项 i,例如 name: $regex: req.params.keyword, $options: 'i' i 用于不区分大小写 您可以像往常一样在正则表达式模式之后添加选项。 /pattern/i【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

或者干脆

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

i 表示不区分大小写

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

没有aggregate,它对我不起作用。但这确实:

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:
 select * from table where abc like %_keyword%

在 mongo 中是

  const list = await ProductModel.find( pname : $regex : '.*'+ _keyword + '.*' );

这里_keyword 可以是任何文本,例如。水果、钢笔等,因为我正在搜索产品型号。

【讨论】:

以上是关于如何在猫鼬上使用“LIKE”运算符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬上使用变量

在猫鼬上自定义 json 输出

数据未发布在带有快递和翡翠的猫鼬上

如何在猫鼬中使用聚合

如何在猫鼬聚合中使用字段值? (节点)

如何使用猫鼬需要验证在猫鼬中插入多个文档?