symfony - Doctrine Mongodb ODM elemMatch() -
मेरे पास श्रेणियों का संग्रह नीचे है।
{"_id": ObjectId ( ("5353a17dfcda358c1050d1ed"), "नाम": "मोटरसाइकिल", "टैग": {"वाहन", "दोपहिया", "बाइक"}}, {"_id": ऑब्जेक्टआईडी ("5353a17dfcda358c105bde4c"), "नाम": " ऑटोमोबाइल "," टैग ": {" वाहन "," कार "," बाइक "," दोपहिया "," चार पहिया "}}, {" _id ": ऑब्जेक्टआईडी (" 5353a17dfcda358c105fd5e701), "नाम": "कार" , "टैग": {"वाहन", "कार", "चार पहिया"}} अब मैं सिद्धांतों का उपयोग करना चाहता हूं, सिद्धांत ओडीएम क्वेरी बिल्डर और नाम से मेल खाने वाले नाम या मान टैग्स में संग्रहीत है (यानी जब खोज टेक्स्ट कार है तो परिणाम दो श्रेणियां होनी चाहिए - ऑटोमोबाइल के रूप में ऑटोमोबाइल और कारों में कारें हैं और कारों के नाम से एक श्रेणी है)।
मुझे आशा है कि आप स्थिति।
मैं Symfony2 और सिद्धांत-ओडीएम का उपयोग कर रहा हूँ। मैंने elemMatch () का उपयोग करने की कोशिश की है लेकिन मुझे समाधान नहीं मिल सका। मुझे कुंजी और वी के साथ अनुक्रमित सरणी के लिए समाधान मिला alue।
>
यदि टैग केवल एक सरणी है, तो आप इसे अपनी क्वेरी में एक पाठ फ़ील्ड के रूप में देख सकते हैं। आप यह कर सकते हैं:
$ qb = $ this- & gt; createQueryBuilder ('ऐप: कुछ'); $ Qb- & gt; क्षेत्र ( 'टैग्स') - & gt; बराबर ( 'कारें'); यह तब टैग में खोज करेगा।
आपके मामले में आप एक नियमित अभिव्यक्ति चाहते हैं और आप या तो "या" ऑपरेटर का उपयोग करना चाहते हैं खेत। उस मामले में आपको ऐडऑर () का उपयोग करना होगा <पूर्व> $ qb- & gt; ऐडऑर ($ qb- & gt; expr () - & gt; फ़ील्ड ('टैग') - & gt; बराबर (नया \ MongoRegex ("/ कारें / i") )); $ qb- & gt; ऐडऑर ($ qb- & gt; expr () - & gt; फ़ील्ड ('नाम') - & gt; बराबर (नया \ MongoRegex ("/ कार / i"))); उदाहरणों पर पाया जा सकता है और
नोट करें कि यह एक प्रदर्शन हत्यारा है क्योंकि रेगेक्सस यह भी ध्यान रखें कि यदि आप regexes का उपयोग नहीं करते हैं, लेकिन नाम, टैग पर एक समग्र सूचक को परिभाषित नहीं करते हैं, यह भी एक प्रदर्शन हत्यारा होगा यह दोनों क्षेत्रों पर एक सूचकांक होने की आवश्यकता है, जो आपके सिद्धांत दस्तावेज़ की शीर्ष परिभाषा में परिभाषित है, इसलिए "कक्षा कुछ" से पहले।
Comments
Post a Comment