Mongoose.js: Найти пользователя по имени пользователя LIKE value - PullRequest
83 голосов
/ 22 марта 2012

Мне нравится искать пользователя в mongoDb, ища пользователя с именем value.Проблема с:

username: 'peter'

в том, что я не могу найти его, если имя пользователя "Питер" или "Питер" .. или что-то в этом роде.

Так что я хочу сделать какsql

SELECT * FROM users WHERE username LIKE 'peter'

Надеюсь, вы, ребята, получите то, что им нужно?

Short: 'field LIKE value' в mongoose.js / mongodb

Ответы [ 11 ]

140 голосов
/ 29 марта 2012

Хорошо. Просто для людей, которые ищут ответ, которым я был, я сделал это

var name = 'Peter';
model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
  //Do your action here..
});
68 голосов
/ 22 марта 2012

У меня недавно были проблемы с этим, я использую этот код и отлично у меня работает.

var data = 'Peter';

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

Используй напрямую /Peter/i работа, но я использую '/'+data+'/i' и не работай для меня.

22 голосов
/ 03 августа 2017
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
14 голосов
/ 22 марта 2012
collection.findOne({
    username: /peter/i
}, function (err, user) {
    assert(/peter/i.test(user.username))
})
13 голосов
/ 17 июля 2014
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);
    });

});  
13 голосов
/ 22 марта 2012

Для этого следует использовать регулярное выражение.

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

Однако будьте осторожны, так как этот запрос не использует индекс.

7 голосов
/ 21 июля 2016

Мангуста для поиска.mongodb doc для регулярных выражений.

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" для совпадения без учета регистра.Надеюсь, это поможет вам.

6 голосов
/ 27 июня 2017

Это то, что я использую.

module.exports.getBookByName = function(name,callback){
    var query = {
            name: {$regex : name}
    }
    User.find(query,callback);
}
6 голосов
/ 28 ноября 2016

Следующий запрос найдет документы с необходимой строкой без учета регистра и с глобальным вхождением также

var name = 'Peter';
    db.User.find({name:{
                         $regex: new RegExp(name, "ig")
                     }
                },function(err, doc) {
                                     //Your code here...
              });
5 голосов
/ 14 октября 2015

Вот мой код с 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);
            });
         });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...