IT

Mongoose.js : 사용자 이름 LIKE 값으로 사용자 찾기

lottoking 2020. 9. 17. 08:09
반응형

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

반응형