5

द्वारा Laravel MongoDB के लिए MongoDB एकत्रीकरण जिज्ञासा को बदलने के लिए मैं MongoDB संग्रह है कहा जाता बदलता है जो निम्न डेटाकैसे jenssegers

{ 
    "date" : ISODate("2014-06-09T00:00:00.000Z"), 
    "field" : "ip", 
    "from" : "157.11.209.123", 
    "to" : "107.21.109.254" 
} 
{ 
    "date" : ISODate("2014-05-15T00:00:00.000Z"), 
    "field" : "ip", 
    "from" : "107.21.109.254", 
    "to" : "157.11.209.123" 
} 
{ 
    "date" : ISODate("2014-06-09T00:00:00.000Z"), 
    "field" : "registration", 
    "from" : "Old service", 
    "to" : "Some new service" 
} 

तब मैं ठेठ SQL क्वेरी कि field द्वारा घटनाओं और यह समूह में गिना जाता है बनाना चाहते हैं। तो, मैं MongoDB

db.changes.group({ 
    "key": { 
     "field": true 
    }, 
    "initial": { 
     "count": 0, 
    }, 
    "reduce": function(obj, prev) { 
      prev.count++; 
    }, 
}); 

यह ठीक काम करता है लेकिन मैं इसे कैसे काम करता है में बदल सकते हैं Laravel 4 साथ में क्वेरी बना लिया है? मैं mongo सर्वर के साथ संवाद करने के लिए jenssegers/laravel-mongodb का उपयोग कर रहा हूँ।

इसके अलावा, मेरे पास क्वेरी में अधिक स्थितियां हैं, जिन्हें मैंने अपना प्रश्न अधिक स्पष्ट रूप से दिखने के लिए हटा दिया है, इसलिए मैं उस क्वेरी को लार्वेल में बदलने के लिए समाधान की तलाश कर रहा हूं, अन्य संभावित समाधान नहीं :)।

उत्तर

8

आप समेकन ढांचे के तरीकों का उपयोग करके बेहतर हैं और अंतर्निहित ड्राइवर से प्रदान किए गए कच्चे मोंगोडीबी संग्रह वस्तु में डाइविंग भी कर रहे हैं। ऐसा नहीं है कि वाक्य रचना का अनुवाद करने की कोशिश कर रहा एक बेहतर विकल्प है:

// Returns the original Mongo Result 
$result = DB::collection('changes')->raw(function($collection) 
{ 
    return $collection->aggregate(array(
     array(
      '$group' => array(
       '_id' => '$field', 
       'count' => array(
        '$sum' => 1 
       ) 
      ) 
     ) 
    )); 
}); 

परिणाम .group() की तरह एक विधि का परिणाम से थोड़ा अलग है लेकिन इस MongoDB सर्वर पर मूल कोड का उपयोग करता है और इस तरह जावास्क्रिप्ट व्याख्या पर निर्भर नहीं करता .group() विधि वास्तव में करता है, वास्तव में नक्शा रेडियस के चारों ओर एक रैपर होने के नाते।

अंतिम परिणाम बहुत तेज़ है, और आम तौर पर आप देशी फ्रेमवर्क इंटरफ़ेस से बाहर होने से अधिक कुशल भी होंगे।

तो सर्वश्रेष्ठ प्रदर्शन के लिए मूल मोंगोडीबी मार्ग का उपयोग करें।

+0

ठीक है, यह कमाल काम करता है, लेकिन संभवतः एक कमी है। मुझे कुछ समय की अवधि (पिछले सप्ताह और पिछले महीने के भीतर) की गणना करने की आवश्यकता है। मैं 2 प्रश्नों को चलाने के लिए नहीं चाहता, जबकि मैं एक बना सकता हूं। मैंने अपनी मूल क्वेरी संलग्न की है। मैं आपके उदाहरण में कस्टम कम फ़ंक्शन कैसे चला सकता हूं? –

+2

@estshy वास्तव में आपके प्रश्न को बदलने का अच्छा विचार नहीं है। यह उन लोगों के लिए बहुत भ्रामक है जो साथ आते हैं और देखते हैं कि प्रदान किए गए उत्तर आपके द्वारा पूछे गए मेल से मेल नहीं खाते हैं। यदि आप एक और प्रश्न पोस्ट करते हैं तो मैं दूसरों को इसका जवाब देने में प्रसन्नता दूंगा। यहां सामान्य मामला एक प्रश्न है। मैं आपके अतिरिक्त प्रश्न का उत्तर दे सकता हूं लेकिन यह एक और सवाल पूरी तरह से होना चाहिए। कृपया इसे अलग से पोस्ट करें। –