2012-11-05 15 views
6

मैं पिमोंगो का उपयोग कर रहा हूं और पात्रों के एक निश्चित अनुक्रम से शुरू होने वाली वस्तुओं की खोज करना चाहता हूं। मुझे लगता है कि इस तरह से लागू हो सकता है:मोंगोडीबी/पायमोंगो: रेगेक्स खोज में पैरामीटर कैसे बचें?

items = collection.find({ 'key': '/^text/' }) 

यह काम करना चाहिए, लेकिन क्या हुआ अगर text एक चर रहा है? मैं कुछ ऐसा कर सकता है:

items = collection.find({ 'key': '/^' + variable + '/' }) 

लेकिन अब अगर variable में पाठ (जैसे $ के रूप में) विशेष regex अर्थ के साथ किसी भी वर्ण हैं, क्वेरी को अब अपेक्षा के अनुरूप व्यवहार करता है। क्या कुछ प्रकार के पैरामीटर बाध्यकारी करने का कोई तरीका है? क्या मुझे variable स्वयं को sanitize करना है? क्या यह भी भरोसेमंद संभव है?

धन्यवाद!

उत्तर

7

आपको रेगेक्स प्रोग्रामेटिक रूप से इकट्ठा करना होगा। तो या तो:

import re 
regex = re.compile('^' + re.escape(variable)) 
items = collection.find({ 'key': regex }) 

या

items = collection.find({'key': { '$regex': '^' + re.escape(variable) }}) 

ध्यान दें कि कोड re.escape का उपयोग करता स्ट्रिंग मामले में यह विशेष वर्ण से बचने के लिए।

+0

उपयोग करना होगा। ऐसा लगता है कि हम दोनों एक ही निष्कर्ष पर आए: 'पुनः' मॉड्यूल का उपयोग करें। धन्यवाद! – Sam

-1

यहाँ अवधारणा है: आप मैं देख रहा हूँ कि आप एक ही समय में आपकी पोस्ट संपादित के रूप में मैं अपने जवाब प्रस्तुत regex

items = collection.find({ 
    'key' : { 
     $regex : yourRegex 
    } 
}) 
संबंधित मुद्दे