복붙노트

[MONGODB] Mongoose.js는 : 사용자 이름 LIKE 값으로 사용자를 찾습니다

MONGODB

Mongoose.js는 : 사용자 이름 LIKE 값으로 사용자를 찾습니다

나는 사용자라는 값을보고하여 MongoDB에서 사용자를 찾아 가고 싶다. 문제를 :

username: 'peter'

사용자 이름은 "베드로", 또는 "피터".. 또는 같은 경우 내가 그것을 찾을 해달라고입니다.

나는 SQL처럼하고 싶지 그래서

SELECT * FROM users WHERE username LIKE 'peter'

너희들은 내가 요구하고있는 무슨을 얻을 희망?

짧은 : mongoose.js에서 '필드 LIKE 값'/ MongoDB를

해결법

  1. ==============================

    1.잘. 그냥 답을 찾고있는 사람들을 위해 나는이 같은 짓이었다

    잘. 그냥 답을 찾고있는 사람들을 위해 나는이 같은 짓이었다

    var name = 'Peter';
    model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
      //Do your action here..
    });
    
  2. ==============================

    2.난 내가 나를 위해이 코드와 잘 작동을 사용하여, 최근에 문제가 있었다.

    난 내가 나를 위해이 코드와 잘 작동을 사용하여, 최근에 문제가 있었다.

    var data = 'Peter';
    
    db.User.find({'name' : new RegExp(data, 'i')}, function(err, docs){
        cb(docs);
    });
    

    직접 / 피터 / 내가 일을 사용하여,하지만 난 '/'+ 데이터 + 나에게 '/ I'가 아니라 작업 사용합니다.

  3. ==============================

    3.

    db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
    
  4. ==============================

    4.

    collection.findOne({
        username: /peter/i
    }, function (err, user) {
        assert(/peter/i.test(user.username))
    })
    
  5. ==============================

    5.당신은 그것을 위해 정규식을 사용합니다.

    당신은 그것을 위해 정규식을 사용합니다.

    db.users.find({name: /peter/i});
    

    이 쿼리는 인덱스를 사용하지 않는,하지만,주의하십시오.

  6. ==============================

    6.

    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);
        });
    
    });  
    
  7. ==============================

    7.발견을위한 몽구스 문서. 정규식에 대한 MongoDB를의 문서.

    발견을위한 몽구스 문서. 정규식에 대한 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 함수에 전달하는 첫 번째 인수를 참고 : { "이름": {$ 정규식 : / 유령 / $ 옵션 : 'I'}} "이름은"당신이 찾고있는 문서의 필드, "유령"이다 정규 표현식은 "내가"대소 문자를 구분하지 일치하는 것입니다이다. 이 당신을 도울 것입니다 바랍니다.

  8. ==============================

    8.다음 쿼리는 소문자를 구별하고 글로벌 발생에 필요한 문자열 케이스 문서를 찾을 수 있습니다

    다음 쿼리는 소문자를 구별하고 글로벌 발생에 필요한 문자열 케이스 문서를 찾을 수 있습니다

    var name = 'Peter';
        db.User.find({name:{
                             $regex: new RegExp(name, "ig")
                         }
                    },function(err, doc) {
                                         //Your code here...
                  });
    
  9. ==============================

    9.이것은 내가 사용하는 것이다.

    이것은 내가 사용하는 것이다.

    module.exports.getBookByName = function(name,callback){
        var query = {
                name: {$regex : name}
        }
        User.find(query,callback);
    }
    
  10. ==============================

    10.expressJS 내 코드 여기 :

    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);
                });
             });
    
  11. ==============================

    11.나는 어떤 조건에서 모든 기록을 조회 할 경우,이를 사용할 수 있습니다 :

    나는 어떤 조건에서 모든 기록을 조회 할 경우,이를 사용할 수 있습니다 :

    if (userId == 'admin')
      userId = {'$regex': '.*.*'};
    User.where('status', 1).where('creator', userId);
    
  12. ==============================

    12.그냥 @PeterBechP의 대답을 보완.

    그냥 @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. from https://stackoverflow.com/questions/9824010/mongoose-js-find-user-by-username-like-value by cc-by-sa and MIT license