Mongoose.js:按用户名LIKE值查找用户

Pet*_*chP 86 javascript find mongoose mongodb node.js

我喜欢通过查找名为value的用户在mongoDb中找到用户.问题:

username: 'peter'
Run Code Online (Sandbox Code Playgroud)

如果用户名是"彼得",或"彼得"......或类似的东西,我不会找到它.

所以我想像sql一样

SELECT * FROM users WHERE username LIKE 'peter'
Run Code Online (Sandbox Code Playgroud)

希望你们得到我要求的东西?

简短:mongoose.js/mongodb中的"字段LIKE值"

Pet*_*chP 141

好.对于那些正在寻找答案的人来说,我就是这样做的

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

  • 这假定正则表达式无效.例如,如果添加"["作为用户名,则会抛出异常.只需确保您要先尝试捕捉或重新输入您的输入并检查[^ a-zA-Z0-9]然后再继续.在这种情况下,它的正确测试输入是有意义的. (10认同)
  • “ i”自变量是什么意思?与区分大小写有关吗? (2认同)
  • "我"是选择搜索标志的论据."我"然后是不区分大小写的.你可以在这里读更多关于它的内容.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions (2认同)

Don*_*pez 70

我最近遇到了这个问题,我使用这个代码并且对我来说很好.

var data = 'Peter';

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

直接使用/Peter/i工作,但我使用,'/'+data+'/i'而不是为我工作.


小智 25

db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 14

collection.findOne({
    username: /peter/i
}, function (err, user) {
    assert(/peter/i.test(user.username))
})
Run Code Online (Sandbox Code Playgroud)

  • @PeterBechP构造一个正则表达式:\`new RegExp(var,“ i”)` (2认同)

Ser*_*sev 13

你应该使用正则表达式.

db.users.find({name: /peter/i});
Run Code Online (Sandbox Code Playgroud)

但是要小心,这个查询不使用索引.


vic*_*chi 13

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

});  
Run Code Online (Sandbox Code Playgroud)


Sha*_*ana 7

猫鼬文档查找。正则表达式的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);
});
Run Code Online (Sandbox Code Playgroud)

请注意,我们传递给mongoose.findOne函数的第一个参数:{ "name" : { $regex: /Ghost/, $options: 'i' } }"name"是要搜索的文档的字段,"Ghost"是正则表达式,"i"不区分大小写。希望这会帮助你。


pro*_*per 6

以下查询将查找具有所需字符串不区分大小写的文档以及具有全局匹配项的文档

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


小智 6

这就是我正在使用的.

module.exports.getBookByName = function(name,callback){
    var query = {
            name: {$regex : name}
    }
    User.find(query,callback);
}
Run Code Online (Sandbox Code Playgroud)


Enr*_*rin 5

这里我的代码用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);
            });
         });
Run Code Online (Sandbox Code Playgroud)