web-dev-qa-db-fra.com

Mongoose.js: recherche d'un utilisateur par nom d'utilisateur LIKE value

J'aime aller chercher un utilisateur dans mongoDb en recherchant un utilisateur appelé valeur. Le problème avec:

username: 'peter'

est-ce que je ne le trouve pas si le nom d'utilisateur est "Peter", ou "PeTER" .. ou quelque chose comme ça.

Donc, je veux faire comme SQL

SELECT * FROM users WHERE username LIKE 'peter'

J'espère que vous obtenez ce que je demande?

Court: 'champ LIKE valeur' ​​dans mongoose.js/mongodb

83
PeterBechP

Bien. Juste pour les gens qui cherchent la réponse, j'étais comme ça

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

J'ai eu des problèmes avec cela récemment, j'utilise ce code et fonctionne bien pour moi.

var data = 'Peter';

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

Utiliser directement /Peter/i fonctionne, mais j’utilise '/'+data+'/i' et ne travaille pas pour moi.

68
Donflopez
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
22
Kanomdook
collection.findOne({
    username: /peter/i
}, function (err, user) {
    assert(/peter/i.test(user.username))
})
14
Raynos

Vous devriez utiliser une regex pour cela.

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

Soyez prudent, cependant, que cette requête n'utilise pas index.

13
Sergio Tulentsev
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
victorkurauchi

mangouste doc pour trouver. Doc de mongodb pour regex.

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

Notez le premier argument que nous passons à mongoose.findOne une fonction: { "name" : { $regex: /Ghost/, $options: 'i' } }, "name" est le champ du document que vous recherchez, "Ghost" est l'expression régulière, "i" est destiné à la correspondance insensible à la casse. J'espère que cela vous aidera.

7
Shashith Darshana

La requête suivante trouvera les documents avec la chaîne requise ( sans distinction de casse et avec une occurrence globale également

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

C'est ce que j'utilise.

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

Voici mon code avec 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);
            });
         });
5
Enrico Giurin

si je veux interroger tous les enregistrements à une condition je peux utiliser ceci:

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