我想通过查找名为value的用户来找到mongoDb中的用户。 问题:
username: 'peter'
如果用户名是“Peter”,或“Peter”......或类似的东西,我就找不到它。
所以我想做sql
SELECT * FROM users WHERE username LIKE 'peter'
希望你们得到我要求的东西?
短:mongoose.js / mongodb中的'字段LIKE值'
答案 0 :(得分:136)
好。对于那些正在寻找答案的人来说,我就是这样做的
var name = 'Peter';
model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
//Do your action here..
});
答案 1 :(得分:67)
我最近遇到了这个问题,我使用这段代码并且对我来说很好。
var data = 'Peter';
db.User.find({'name' : new RegExp(data, 'i')}, function(err, docs){
cb(docs);
});
直接使用/Peter/i
工作,但我使用'/'+data+'/i'
并不适合我。
答案 2 :(得分:21)
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
答案 3 :(得分:14)
collection.findOne({
username: /peter/i
}, function (err, user) {
assert(/peter/i.test(user.username))
})
答案 4 :(得分:13)
你应该使用正则表达式。
db.users.find({name: /peter/i});
但要小心,此查询不使用索引。
答案 5 :(得分:13)
router.route('/product/name/:name')
.get(function(req, res) {
var regex = new RegExp(req.params.name, "i")
, query = { description: regex };
Product.find(query, function(err, products) {
if (err) {
res.json(err);
}
res.json(products);
});
});
答案 6 :(得分:6)
mongoose doc for find。 正则表达的mongodb doc。
var Person = mongoose.model('Person', yourSchema);
// find each person with a name contains 'Ghost'
Person.findOne({ "name" : { $regex: /Ghost/, $options: 'i' } },
function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation);
});
请注意我们传递给mongoose.findOne
函数的第一个参数:{ "name" : { $regex: /Ghost/, $options: 'i' } }
,"name"
是您要搜索的文档的字段,"Ghost"
是正则表达式,{{ 1}}用于不区分大小写的匹配。希望这会对你有所帮助。
答案 7 :(得分:6)
以下查询将查找具有所需字符串 不区分大小写且具有全局匹配项的文档
super
答案 8 :(得分:6)
这就是我正在使用的。
module.exports.getBookByName = function(name,callback){
var query = {
name: {$regex : name}
}
User.find(query,callback);
}
答案 9 :(得分:5)
这里我的代码是expressJS:
router.route('/wordslike/:word')
.get(function(request, response) {
var word = request.params.word;
Word.find({'sentence' : new RegExp(word, 'i')}, function(err, words){
if (err) {response.send(err);}
response.json(words);
});
});
答案 10 :(得分:2)
对于动态搜索,你也可以这样关注,
const { keyword, skip, limit, sort } = pagination(params);
const search = keyword
? {
title: {
$regex: new RegExp(keyword, 'i')
}
}
: {};
Model.find(search)
.sort(sort)
.skip(skip)
.limit(limit);
答案 11 :(得分:1)
如果我想在某种情况下查询所有记录,我可以使用:
if (userId == 'admin')
userId = {'$regex': '.*.*'};
User.where('status', 1).where('creator', userId);
答案 12 :(得分:0)
只需补充@PeterBechP的答案即可。
别忘了换上特殊字符。 https://stackoverflow.com/a/6969486
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
var name = 'Peter+with+special+chars';
model.findOne({name: new RegExp('^'+escapeRegExp(name)+'$', "i")}, function(err, doc) {
//Do your action here..
});
答案 13 :(得分:0)
这是将需求中的每个值转换为猫鼬 Like 参数的解决方案:
let superQ = {}
Object.entries({...req.body}).map((val, i, arr) => {
superQ[val[0]] = { '$regex': val[1], '$options': 'i' }
})
User.find(superQ)
.then(result => {
res.send(result)})
.catch(err => {
res.status(404).send({ msg: err }) })