MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कैसे Laravel और MongoDB का उपयोग कर शामिल हुए संग्रह पर मिलान करने के लिए?

आप एक कच्चा कर सकते हैं कुल () . के साथ क्वेरी जो $lookup का उपयोग कर सकता है यहां "जॉइन" करने के लिए ऑपरेटर:

  $result = Booking::raw(function($collection) use($search, $start, $limit) {
     return $collection->aggregate(array(
       array( '$lookup' => array(
         'from' => 'users',
         'localField' => 'user',
         'foreignField' => '_id',
         'as' => 'user'
       )),
       array( '$unwind' => array( 
         'path' => '$user', 'preserveNullAndEmptyArrays' => True
       )),
       array( '$match' => array(
         '$or' => array(
           array( 'invoice_number' => array( '$regex' => $search ) ),
           array( 'payment_type' => array( '$regex' => $search ) ),
           array( 'txid' => array( '$regex' => $search ) ),
           array( 'user.usrEmail' => array( '$regex' => $search ) )
         )
       )),
       array( '$skip' => $start ),
       array( '$limit' => $limit )
     ));
  });

$lookup आपूर्ति किए गए 'localField' में "कोई नहीं" या अधिक मिलान वाली प्रविष्टियों वाले लक्ष्य फ़ील्ड के लिए एक "सरणी" लौटाएगा value(s), जहां वह या तो एकवचन या मानों की एक सरणी है। आमतौर पर हम ObjectId . का उपयोग करते हैं यहां, विशेष रूप से 'विदेशी क्षेत्र' . से लिंक करते समय _id . के रूप में ।

यह क्लाइंट की ओर से की जा सकने वाली किसी भी चीज़ से बेहतर है, क्योंकि किसी भी अन्य ऑपरेशन के लिए प्रत्येक संग्रह स्रोत के लिए डेटाबेस में कई प्रश्न करने की आवश्यकता होगी। $lookup यह एक ही अनुरोध और प्रतिक्रिया में करता है।

एकमात्र वास्तविक नोट यह है कि क्योंकि यह ओआरएम/ओडीएम से "अलग" है, आपको वास्तविक "संग्रह नाम" निर्दिष्ट करने की आवश्यकता है, न कि कक्षा या मॉडल का। तो मैं बस मान रहा हूँ "users" यहां, लेकिन आपको इसे उपयोगकर्ताओं . के लिए अपने संग्रह के अनुसार समायोजित करने की आवश्यकता हो सकती है वास्तव में कहा जाता है।

वैसे भी, आपके पास "शामिल" डेटा होने के बाद आप कर सकते हैं $मैच "usrEmail" . पर सम्मिलित डेटा से संपत्ति, और अपनी क्वेरी में शामिल करें।

वास्तविक क्वेरी के लिए, चूंकि आप मूल रूप से एक $या . कर रहे हैं दोनों संग्रहों के डेटा की स्थिति हम वास्तव में $match शामिल होने के "बाद" तक।

फिर निश्चित रूप से $skip के लिए एकत्रीकरण चरण हैं। कोड> और $limit आपके पेजिनेशन के लिए भी।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. एक प्रश्न में सभी दस्तावेज़ों का आकार प्राप्त करें

  2. Node.js से MongoDB से कनेक्ट करना धीमा क्यों है

  3. es6 शैली आयात का उपयोग करके MongoDB कैसे आयात करें?

  4. मैं MongoDB का उपयोग करके Heroku पर अपना स्वयं का पार्स सर्वर कैसे होस्ट कर सकता हूं?

  5. एक हाइब्रिड क्लाउड वातावरण में MongoDB की नकल करना