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 |