2012-11-30 11 views
7

मैं एक मोंगो डीबी के आधार पर एक एपीआई पूछने के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं।मोंगो डीबी ऑपरेटर की तरह

मुझे पसंद है ऑपरेटर, कुछ इसी तरह के आधार पर परिणाम फ़िल्टर

select * from playlist where title like '%a%' 

को पल मैं इस URL

var assetUrl = 'https://example.com/playlist?oauth_token=' + accessToken + '&account=XXX'+ '&fields={"title":true,"splash":true,"description":true,"source":true}'+ '&criteria={"title":/.*a.*/}'; 

फोन कोई सफलता (वापसी 0 वस्तुओं) के साथ पर की आवश्यकता होगी।

मैं जानना चाहता हूं कि मुझे इसके बजाय नियमित अभिव्यक्तियों का उपयोग करना चाहिए और इस संदर्भ में उनका उपयोग कैसे करना चाहिए। धन्यवाद

उत्तर

18

हां, मोंगोडीबी नियमित अभिव्यक्तियों का समर्थन करता है। आप इसके बारे में the documentation में पढ़ सकते हैं।

db.collection.find({ url: /.*a.*/ }); 

इस संग्रह में जहां क्षेत्र "Url" नियमित अभिव्यक्ति से मेल खाता में सभी दस्तावेजों पाता है: यहाँ एक उदाहरण है। $ Regex ऑपरेटर का उपयोग करके एक वैकल्पिक वाक्यविन्यास भी है:

db.collection.find({ url: { $regex: ".*a.*"} }); 

ध्यान दें कि नियमित अभिव्यक्ति धीमी और स्केल बुरी तरह से होती है। खोज समय संग्रह में रिकॉर्ड्स की संख्या के लिए रैखिक है, और सूचकांक केवल तभी मदद करते हैं जब आपकी नियमित अभिव्यक्ति प्रारंभिक स्ट्रिंग एंकर ^ (धन्यवाद, chx) के साथ शुरू होती है।

प्रलेखन में Full Text Search in Mongo का एक अध्याय भी है जो प्रत्येक स्ट्रिंग को अलग-अलग शब्दों की सरणी में विभाजित करने की अनुशंसा करता है, ताकि आप इसे तेजी से लुकअप के लिए अनुक्रमित कर सकें। यह निश्चित रूप से शब्द खंडों की खोज करने की अनुमति नहीं देता है, लेकिन पूर्ण शब्दों की खोज में बहुत तेजी से गति करता है।

अद्यतन: MongoDB 2.4 a new experimental text-index feature जो सूचकांक के साथ पाठ-खोज में तेजी लाने के लिए अनुमति देता है है।

Update2: संस्करण 2.6 के रूप में, पाठ खोज डिफ़ॉल्ट रूप से सक्षम और उत्पादक उपयोग के लिए तैयार कर रहा है।

+2

कभी कभी नियमित अभिव्यक्ति धीमी गति से नहीं कर रहे हैं: "$ regex अनुक्रमित का उपयोग करता है केवल जब नियमित अभिव्यक्ति एक स्ट्रिंग की शुरुआत के लिए एक लंगर (अर्थात ^) है।" http://docs.mongodb.org/manual/reference/operators/ – chx

+0

धन्यवाद, @chx, मैंने उस जानकारी को मेरे उत्तर में एकीकृत किया। – Philipp

0
var assetUrl = 'xxx.com/playlist?oauth_token=' + accessToken + '&account=xxx'+ '&fields='+escape('{"title":true,"splash":true,"description":true,"source":true}')+ '&criteria='+escape('{"title": {"$regex":".*ar.*"}}'); 

यह मेरी समस्या हल

संबंधित मुद्दे