2012-05-14 16 views
5

उपयोग मिल ->कृपया तल पर अद्यतन देखने, मैं मोंगो में एक ही मुद्दा शैलphp मोंगो केवल 4 मापदंड

मेरे मापदंड दोहराया है GET पैरामीटर के माध्यम से भेजी जा रही है और $ डेटा (में रखा जाता है एक assc सरणी के रूप में)। फिर यह अनुभाग से नीचे हो जाता है, जहां प्रत्येक खोज शब्द आंशिक सटीक मिलान नहीं होता है। उसके बाद हम रिक्त मानदंडों को हटाते हैं (अनसेट)।

कुल मिलाकर 15 फ़ील्ड संभवतः कम से कम 1 और अधिकतम 15 सेट किए जा सकते हैं।

foreach ($data as $k => $v) { 
    // Make them partial match 
    $data[$k] = new MongoRegex('/'.$v.'/i'); 
    // Remove empty criteria 
    if (empty($v)) unset($data[$k]); 
} 
// Run the search 
$cursor = $this->collection->find($data); 

सब कुछ जब तक मिठाई काम करता है के रूप में पारित criterias 4 हैं या उससे कम की तरह:

Array ( 
    [phone] => MongoRegex Object ([regex] => 433 [flags] => i) 
    [property_name] => MongoRegex Object ([regex] => west [flags] => i) 
    [city] => MongoRegex Object ([regex] => H [flags] => i) 
    [zip_postcode] => MongoRegex Object ([regex] => 9 [flags] => i) 
) 

यह रिटर्न 5 परिणाम नहीं।

लेकिन 4 वें के बाद जोड़ा गया कोई भी मानदंड अप्रभावी है।

Array ( 
    [phone] => MongoRegex Object ([regex] => 433 [flags] => i) 
    [state_province] => MongoRegex Object ([regex] => Virginia [flags] => i) 
    [property_name] => MongoRegex Object ([regex] => west [flags] => i) 
    [city] => MongoRegex Object ([regex] => H [flags] => i) 
    [zip_postcode] => MongoRegex Object ([regex] => 9 [flags] => i) 
) 

2 वापसी, लेकिन अभी भी 5 वापस आती है और यह कोई फर्क नहीं पड़ता कि कितने मापदंड आइटम

जुड़ जाते हैं 5 वापस आ जाएगी चाहिए

- अद्यतन -

तो मैं उस में की कोशिश की है शैल और मेरे आश्चर्य से यह भी काम नहीं करता है।

db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/}).count() 

रिटर्न 5

अब जब मैं 2 5 वीं पैरामीटर यह परिणामों को सीमित करना चाहिए जोड़ने, लेकिन यह अप्रभावी है और अभी भी 5 के रूप में गिनती दिखाने !!!

db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:/Virginia/}).count() 

रिटर्न 5

प्रयोगों की एक बहुत कुछ के साथ

, मुझे एहसास हुआ कि यह केवल पहले 4 मापदंड उठाया जा रहा है !! जैसे कि आखिरी उदाहरण में मैं 'state_province' और 'city' के लिए जगह स्विच करता हूं, यह 'शहर' मानदंड होगा जो अप्रभावी होगा क्योंकि यह 5 वां मानदंड होगा !!

- नई अद्यतन -

यह पता चला है कि अगर मैं 5 वीं मापदंड यह काम करेंगे पर सामान्य के बजाय मैच regex का उपयोग। क्या मैं मानता हूं कि मोंगो केवल 4 रेगेक्स मानदंडों के लिए ढूंढ सकता है? सही ढंग से रिटर्न तो यह होगा 1

db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:Virginia}).count() 
+0

क्या ऐसा ही होता है यदि आपके पास अभी "state_province" है?क्या आप इसे मोंगो खोल पर दोहरा सकते हैं? – Derick

+0

अरे डेरिक, आपके उत्तर के लिए धन्यवाद, मैंने इसे मोंगो खोल में भी कोशिश की है और मेरे आश्चर्य की बात अभी भी एक ही समस्या है ... मैं लगभग निश्चित हूं कि मोंगो रेगेक्स मानदंड को 4 तक सीमित नहीं कर रहा है? !! – Zoheir

उत्तर

2

क्वेरी के साथ 4 अनुमति regex मानदंडों के एक कठिन सीमा नहीं है। https://github.com/mongodb/mongo/commit/62554d064a264f9b6c28099ba71421f250bbbba9

ऐसा लगता है कि यह सुधार मोंगो के 1.8 या 2.0 शाखाओं में अभी तक नहीं निकाला गया है, यहाँ v1.8 हार्ड सीमा दिखा शाखा है:: https://github.com/mongodb/mongo/blob/v1.8/db/matcher.cpp#L159

यह कोर मोंगो कोड के बारे में छह महीने पहले में तय किया गया था
+0

धन्यवाद स्टीव! लेकिन ऐसा लगता है कि इसे बाद के संस्करणों में भी तय नहीं किया गया है: – Zoheir

+0

आह, आप सही हैं, यह मास्टर शाखा (http://bit.ly/Kbjfeh) में तय है लेकिन अभी तक v2.0 (http में नहीं) : //bit.ly/Kbjm9M)। वास्तव में, v2.0 शाखा अभी भी मास्टर (http://bit.ly/KbjrtT) के पीछे काफी तरीके है। ऐसा लगता है कि आपको इस समस्या के आसपास एक और तरीका खोजने की आवश्यकता होगी। बीटीडब्ल्यू, मैंने इस समस्या को अपने डीबी पर पुन: पेश करने का प्रयास किया है, लेकिन अनुक्रमित क्षेत्रों पर रेगेक्स का उपयोग करते समय भी, 4 रेगेक्स घटक इतनी धीमी गति से बनाते हैं कि मुझे आसानी से तुलना नहीं मिल सकती: पी – SteveK

+0

मैं इसे पुन: उत्पन्न करने में सक्षम था। अपने mongodb.log की जांच करें, आपको यह देखना चाहिए: 'सोम मई 14 22:02:30 [conn290] त्रुटि: क्वेरी में बहुत सारे regexes' – SteveK

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