2012-04-20 14 views
35

में किसी फ़ील्ड में एक सबस्ट्रिंग कैसे खोजें I डेटाबेस में सभी ऑब्जेक्ट्स को कैसे ढूंढ सकता है जहां ऑब्जेक्ट के किसी फ़ील्ड में सबस्ट्रिंग होता है?Mongodb

तो क्षेत्र है एक स्ट्रिंग मान के साथ एक संग्रह की एक वस्तु में एक:

मैं db "डेटाबेस" में सभी वस्तुओं को जहां एक सबस्ट्रिंग कहना होता है पता लगाना चाहते हैं "abc def"।

मैंने कोशिश की:

db.database.find({A: {$regex: '/^*(abc def)*$/''}}) 

लेकिन

अद्यतन

एक असली स्ट्रिंग काम नहीं किया (यूनिकोड में):

Sujet Commentaire sur Star Wars Episode III - La Revanche des Sith 1 

सभी के लिए खोज करने के लिए की आवश्यकता है स्टार वार्स

के साथ प्रविष्टियां
db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring 
+1

करना होगा, अगर उपयोग करें आप "वर्णों की किसी भी स्ट्रिंग" को देखना चाहते हैं, आपको किसी भी (एकल) वर्ण के लिए '। *': '.' की आवश्यकता है," पिछली चीज़ किसी भी संख्या (शून्य सहित) के लिए '*'। '(स्टार वार्स) * $ 'आप" स्टार वार्सस्टार वारस्स्ट युद्ध "से मेल खाते हैं लेकिन" स्टार वार्स महान नहीं है "। – drevicko

उत्तर

39
इसके बजाय इस बात का

:

db.database.find({A: {$regex: '/^*(abc def)*$/''}}) 

आप इस करना चाहिए:

db.database.find({A: /abc def/i }) 

^* वास्तव में मान्य सिंटैक्स^के रूप में और $ एंकर और न कुछ है कि दोहराने योग्य है नहीं है। आप शायद^^ * यहाँ मतलब था। लेकिन ^। * के लिए कोई ज़रूरत नहीं है क्योंकि इसका मतलब है "सब कुछ ऊपर वर्ण के लिए" और (एबीसी डीफ़) * का अर्थ है "0 या अधिक बार" एबीसी डीफ़ ", लेकिन यह स्ट्रिंग के अंत में होना चाहिए, क्योंकि आपके $ की। "i" अंत में यह केस संवेदी बनाने के लिए है।

+2

ध्यान दें कि '^' का उपयोग रेगेक्स क्वेरी को तेज़ करने में मदद करता है क्योंकि इंडेक्स केवल इस फ़ॉर्म में प्रभावी होंगे (http://docs.mongodb.org/manual/reference/operator/regex/ पर पृष्ठ के नीचे देखें) –

+0

सही अगर मैं गलत हूं, लेकिन क्या '^ *' कोई समझ में आता है? यह '^। *' नहीं होना चाहिए? मेरे लिए '^ *' पढ़ता है "लाइन की शून्य या अधिक शुरुआत", जिसमें से केवल और हमेशा एक होता है, और ऐसा लगता है कि यह मुझे पसंद है __doesn't__ रेखा की शुरुआत और शेष रेगेक्स के बीच वर्णों की अनुमति देता है ... – drevicko

+0

@ डेरेविको, आप सही हैं। यह मेरे जवाब में एक टाइपो था। मैंने इसे स्पष्ट किया है। – Derick

16

बस स्ट्रिंग "स्टार वार्स" और @derick बताते हैं के रूप में $regex बाकी

db.test.find({A: {$regex: 'Star Wars'}})