몽구스.js: 사용자 이름 LIKE 값으로 사용자 검색
value라는 사용자를 찾아서 mongoDb에 있는 사용자를 찾고 싶습니다.문제:
username: 'peter'
사용자 이름이 "Peter" 또는 "PTER"이면 찾을 수 없습니다.아니면 그런 비슷한 것.
그래서 sql처럼 하고 싶다.
SELECT * FROM users WHERE username LIKE 'peter'
내가 부탁한 걸 받았으면 좋겠어?
요약: mongoose.js/mongodb의 'field LIKE 값'
솔루션을 찾고 계신 고객님께는 다음과 같습니다.
var name = 'Peter';
model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
//Do your action here..
});
최근에 문제가 있어서 이 코드를 사용하고 있습니다.
var data = 'Peter';
db.User.find({'name' : new RegExp(data, 'i')}, function(err, docs){
cb(docs);
});
직접 사용/Peter/i
일하지만, 나는 사용한다'/'+data+'/i'
날 위해 일하는 게 아니라
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
collection.findOne({
username: /peter/i
}, function (err, user) {
assert(/peter/i.test(user.username))
})
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);
});
});
당신은 그것을 위해 정규식을 사용해야 합니다.
db.users.find({name: /peter/i});
그러나 이 쿼리는 인덱스를 사용하지 않습니다.
다음 쿼리는 필요한 문자열 대소문자를 구분하지 않고 글로벌하게 발생한 문서를 찾습니다.
var name = 'Peter';
db.User.find({name:{
$regex: new RegExp(name, "ig")
}
},function(err, doc) {
//Your code here...
});
이게 내가 쓰고 있는 거야.
module.exports.getBookByName = function(name,callback){
var query = {
name: {$regex : name}
}
User.find(query,callback);
}
mongoose doc는 find, mongodb doc는 regex.
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"
정규 표현입니다."i"
대소문자를 구분하지 않는 일치입니다.이게 도움이 되길 바라.
여기 express 코드JS:
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);
});
});
@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..
});
동적 검색의 경우, 다음과 같이 팔로우 할 수 있습니다.
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);
특정 조건에서 모든 레코드를 쿼리하는 경우 다음을 사용할 수 있습니다.
if (userId == 'admin')
userId = {'$regex': '.*.*'};
User.where('status', 1).where('creator', userId);
이것은 요구량의 모든 값을 mongoose 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 }) })
var name = 'Peter';
model.findOne({
name: {
$regex: name,
$options: 'i'
},
function(err, doc) {
//your logic
});
상세한 것에 대하여는, 다음의 링크를 참조해 주세요.https://www.mongodb.com/docs/manual/reference/operator/query/regex/
언급URL : https://stackoverflow.com/questions/9824010/mongoose-js-find-user-by-username-like-value
'programing' 카테고리의 다른 글
Wordpress와 Cakephp를 통합하는 방법 (0) | 2023.04.03 |
---|---|
React가 관리하는 자녀가 있는 contentEditable 구성 요소에 대해 경고하는 이유는 무엇입니까? (0) | 2023.04.03 |
식과 일치하는 경우 angular ng-skip 항목을 건너뜁니다. (0) | 2023.04.03 |
Woocommerce 변환을 덮어쓰는 방법 (0) | 2023.04.03 |
오라클 Data Pump 내보내기 파일 내의 스키마를 확인하는 방법 (0) | 2023.04.03 |