如何在猫鼬上使用“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”运算符?的主要内容,如果未能解决你的问题,请参考以下文章