Mongoose.js : 사용자 이름 LIKE 값으로 사용자 찾기
나는 값이라는 사용자를 찾아서 mongoDb에서 사용자를 찾고 싶습니다. 문제 :
username: 'peter'
사용자 이름이 "Peter", "PeTER". 또는 그와 경우에는 그렇습니다.
그래서 나는 SQL처럼하고 싶다.
SELECT * FROM users WHERE username LIKE 'peter'
너희들이 내가 원하는 것을 얻길 바래?
Short : mongoose.js / mongodb의 'field LIKE value'
잘. 답을 찾는 사람들을 위해 내가 이렇게 했어
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))
})
이를 위해 정규식을 많이 사용합니다.
db.users.find({name: /peter/i});
하지만이 쿼리는 사용하지 않습니다.
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);
});
});
찾기위한 몽구스 문서. 정규식에 대한 mongodb 문서.
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"
대소 문자를 구분하지 일치합니다. 이것이 당신을 도울 것입니다.
다음 쿼리는 필수 문자열 대소 문자를 구분하지 않고 전역 발생이 있는 문서를 찾습니다.
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);
}
여기 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);
});
});
어떤 조건에서 모든 레코드를 쿼리하려면 다음을 사용할 수 있습니다.
if (userId == 'admin')
userId = {'$regex': '.*.*'};
User.where('status', 1).where('creator', userId);
@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..
});
참고 URL : https://stackoverflow.com/questions/9824010/mongoose-js-find-user-by-username-like-value
'IT' 카테고리의 다른 글
존재 대 구성 (0) | 2020.09.17 |
---|---|
C #에서 공유 파일 경로를 만드는 방법이 있습니까? (0) | 2020.09.17 |
ActiveRecord는 선택한 열을 찾아서 만 반환합니다. (0) | 2020.09.17 |
사용 가능한 avdnames를 사용하는 명령은 무엇입니까? (0) | 2020.09.17 |
사용자 지정 ActionBar 색상 / 스타일을 설정하는 방법은 무엇입니까? (0) | 2020.09.17 |