2012-03-22 16 views
69

द्वारा उपयोगकर्ता को ढूंढें मुझे उपयोगकर्ता को मूल्य के रूप में देखकर mongoDb में उपयोगकर्ता को जाना पसंद है। के साथ समस्या:Mongoose.js: उपयोगकर्ता नाम LIKE मान

username: 'peter' 

कि मुझे नहीं करता है, तो उपयोगकर्ता नाम है "पीटर", या "पीटर" .. या ऐसा ही कुछ इसे खोजने के लिए है।

तो मैं

SELECT * FROM users WHERE username LIKE 'peter' 

आशा है कि आप लोगों के लिए क्या im askin मिल एसक्यूएल की तरह करना चाहते हैं?

लघु: mongoose.js में 'खाने की तरह मान'/MongoDB

+1

बस एक अलग रूप में, SQL क्वेरी नहीं 'Peter' या' PeTER' मिलेगा या तो के रूप में 'LIKE' केस-संवेदी नहीं है। – beny23

+7

क्यों एक नया comer downvote? – Mustafa

उत्तर

116

ठीक है। खोजने के लिए

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

"i" तर्क का क्या अर्थ है? क्या केस संवेदनशीलता के साथ इसका कोई संबंध नहीं है? – AzaFromKaza

+2

"i" एक खोज ध्वज चुनने के लिए एक तर्क है। "मैं" तो मामले के लिए असंवेदनशील है। आप इसके बारे में यहां और अधिक पढ़ सकते हैं। https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions – PeterBechP

+9

यह मानता है कि रेगेक्स अमान्य नहीं है। यदि आप उदाहरण के लिए उपयोगकर्ता नाम के रूप में "[" जोड़ते हैं, तो अपवाद फेंक देगा। बस सुनिश्चित करें कि आप पहले या तो अपने इनपुट को पुनः प्रयास या पुनः प्राप्त कर रहे हैं और [^ a-zA-Z0-9] की जांच कर रहे हैं, फिर आगे बढ़ना नहीं है। इस मामले में, इसका सिर्फ परीक्षण इनपुट इसलिए समझ में आता है। –

12

आप उस के लिए एक regex का उपयोग करना चाहिए।

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

सावधान रहें, हालांकि, यह क्वेरी इंडेक्स का उपयोग नहीं करती है।

+0

तेजी से उत्तर के लिए धन्यवाद! :) – PeterBechP

13
collection.findOne({ 
    username: /peter/i 
}, function (err, user) { 
    assert(/peter/i.test(user.username)) 
}) 
+0

क्या होगा यदि मान एक var है? इसे कैसे सेट करें?/varhere/मैं? – PeterBechP

+0

@ पीटरबैकपी नियमित अभिव्यक्ति का निर्माण करता है: \ 'नया RegExp (var," i ")' – Raynos

+0

ठीक काम करता है .. अब मुझे कोई समस्या है .. अगर var peter है तो इसे केवल पीटर मिलना होगा। लेकिन अगर मैं var को 'p' पर सेट करता हूं तो उसे अभी भी पीटर मिल जाएगा। – PeterBechP

54

मुझे हाल ही में इस समस्या का सामना करना पड़ा, मैं इस कोड का उपयोग करता हूं और मेरे लिए ठीक काम करता हूं।

var data = 'Peter'; 

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

उपयोग सीधे /Peter/i काम करते हैं, लेकिन मैं '/'+data+'/i' का उपयोग करें और मेरे लिए काम नहीं।

+0

ठीक है, मैंने अभी कुछ और कोशिश की है। मुझे यह भी लगता है कि क्या मैं सिर्फ पी लिखता हूं ?? हममम। – PeterBechP

+0

हां, मैं उपयोगकर्ताओं को खोजने के लिए AJAX याचिकाओं के लिए उपयोग करता हूं। आप RegExp को संशोधित कर सकते हैं। – Donflopez

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

}); 
5

यहाँ expressJS के साथ अपने कोड की तरह था। regex के लिए 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 फ़ंक्शन पर जाते हैं। "{" नाम ": {$ regex:/Ghost /, $ विकल्प: 'i'}}"। "नाम" आपके द्वारा खोजे जा रहे दस्तावेज़ का क्षेत्र है। "भूत" नियमित अभिव्यक्ति है। "मैं" असंवेदनशील मैच के मामले में है। आशा है कि यह आपकी मदद करेगा।

3

नेवला डॉक: बस लोग हैं, जो उत्तर के लिए देख रहा कर रहे हैं के लिए मैं मैं इस

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

$ विकल्प क्या हैं – kabuto178

1

अगर मैं कुछ हालत बिल्कुल रिकॉर्ड क्वेरी करना चाहते हैं, मैं इस का उपयोग कर सकते हैं:

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

निम्न क्वेरी आवश्यक तार के साथ दस्तावेजों मामले insensitively और वैश्विक घटना भी

साथ मिलेगा
var name = 'Peter'; 
    db.User.find({name:{ 
         $regex: new RegExp(name, "ig") 
        } 
       },function(err, doc) { 
            //Your code here... 
       }); 
4

यही वह है जिसका मैं उपयोग कर रहा हूं।

module.exports.getBookByName = function(name,callback){ 
    var query = { 
      name: {$regex : name} 
    } 
    User.find(query,callback); 
} 
4
db.users.find({ 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } }) 
संबंधित मुद्दे