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

PHP का उपयोग करके मोंगो डीबी में दस्तावेज़ों के अंदर डेटा जोड़ें

आप कुछ इस तरह की कोशिश कर सकते हैं। मान के रूप में केवल कुंजी के आधार पर सभी मोंगो डीबी संचालन करना संभव नहीं है।

पहला समाधान OP के डिजाइन के करीब रहने के लिए लिखा गया है।

मान लें कि आप year में एक कुंजी जोड़ सकते हैं ।

{
  "cars": [{
      "year": "2017",
      "data": [{
          "car": "Motorolla",
          "color": "blue"
      }]
  }, {
      "year": "2016",
      "data": [{
          "car": "Toyota",
          "color": "green"
      }]
  }]
}

वर्ष को इसके मूल्य से संदर्भित करना आसान बनाता है।

उदाहरण के लिए data . में एक नया मान जोड़ने के लिए year . के लिए सरणी 2017. आप नीचे दिए गए कोड को आजमा सकते हैं।

अद्यतन स्थितिगत $ का उपयोग करता है ऑपरेटर।

query उस सरणी को संदर्भित करने के लिए भाग जहां 2017 रिकॉर्ड संग्रहीत है।

update push . का उपयोग कर भाग नई car जोड़ने के लिए मौजूदा data में रिकॉर्ड करें 2017 . के लिए सरणी पंक्ति।

<?php
    try {        
        $car = 'Malibu';
        $color = 'blue';
        $years = [2017];

        $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
        $bulkWriteManager = new MongoDB\Driver\BulkWrite;

        //{"cars.year":2017}
        $query = ['cars.year' => $years[0]]; 

        //{ $push: { "cars.$.data": { "car":"chevy", "color":"black"} }}
        $update = ['$push'=> ['cars.$.data'=>['car' => $car, 'color' => $color]]];

        try {
            $bulkWriteManager->update($query, $update);  // Update Document
            echo 1;           
        } catch(MongoCursorException $e) {
            /* handle the exception */
            echo 0;
        }

        $manager->executeBulkWrite('dbName.carsCol', $bulkWriteManager);  // Going to DB and Collection

    } catch (MongoDB\Driver\Exception\Exception $e) {
        $filename = basename(__FILE__);
        echo "The $filename script has experienced an error.\n"; 
        echo "It failed with the following exception:\n";       
        echo "Exception:", $e->getMessage(), "\n";
    }

?>

साल के हिसाब से डेटा एक्सेस करने के लिए आप नीचे क्वेरी चला सकते हैं।

क्वेरी पोजिशनल $ का इस्तेमाल करें क्वेरी भाग का उपयोग करके सरणी अनुक्रमणिका खोजने के लिए ऑपरेटर और प्रक्षेपण भाग में उस मान को संदर्भित करें।

db.collection.find({"cars.year":2017}, {"cars.$.data":1});

वैकल्पिक समाधान:

यह सब कुछ सिर्फ इन्सर्ट के रूप में संभाल लेगा

बेहतर होगा कि आप प्रत्येक कार प्रविष्टि को उसके अपने दस्तावेज़ में सहेज लें।

{ "year" : 2017, "car" : "Motorolla", "color" : "blue" }
{ "year" : 2016, "car" : "Toyota", "color" : "green" }
{ "year" : 2015, "car" : "Corolla", "color" : "black" }

प्रत्येक प्रविष्टि के लिए आप इसका उपयोग कर सकते हैं:

db.collection.insert({"year":2017,  "car":"Motorolla", "color":"blue"});

पीएचपी कोड:

 //{"car":"chevy", "color":"black", year: 2017}
 $insert = ['car' => $car, 'color' => $color, 'year' => $years[0]];

 try {
    $bulkWriteManager - > insert($insert); // Inserting Document
    echo 1;
 } catch (MongoCursorException $e) {
    /* handle the exception */
    echo 0;
 }

साल के हिसाब से एक्सेस डेटा के लिए आप उपयोग कर सकते हैं

db.collection.find({"year":2017});

अपडेट किया गया PHP कोड:

<?php 
try { 
  $cars = ['Motorolla','Toyota', 'Corolla'] ; 
  $colors = ['blue', 'green', 'black']; 

  $years = [2017, 2016, 2015]; 
  $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); 
  $bulkWriteManager = new MongoDB\Driver\BulkWrite; 

  $query1 =["year" => $years[0]]; 
  $query2 =["year" => $years[1]]; 
  $query3 =["year" => $years[2]]; 

  $update1 = ['$set' => ['car' => $cars[0], 'color' => $colors[0]]]; 
  $update2 = ['$set' => ['car' => $cars[1], 'color' => $colors[1]]]; 
  $update3 = ['$set' => ['car' => $cars[2], 'color' => $colors[2]]]; 

  try { 
    $bulkWriteManager->update($query1, $update1, ["upsert" => true]); 
    $bulkWriteManager->update($query2, $update2, ["upsert" => true]); 
    $bulkWriteManager->update($query3, $update3, ["upsert" => true]); 
     echo 1; 
  } catch(MongoCursorException $e) { 
  /* handle the exception */ 
  echo 0; 
  } 

  $manager->executeBulkWrite('dbName.carsCol', $bulkWriteManager); // Going to DB and Collection 

  } catch (MongoDB\Driver\Exception\Exception $e) { 
    $filename = basename(__FILE__); 
    echo "The $filename script has experienced an error.\n"; 
    echo "It failed with the following exception:\n"; 
    echo "Exception:", $e->getMessage(), "\n"; 
  } 
?>

आप एग्रीगेशन पाइपलाइन का उपयोग करके जटिल क्वेरी कर सकते हैं और अपनी प्रतिक्रिया को तेज़ करने के लिए इंडेक्स जोड़ सकते हैं।

टिप्पणियां:

पहला समाधान :डेटा को अपडेट/सम्मिलित करना कठिन है, लेकिन डेटा को पढ़ने के लिए सब कुछ एक साथ रखना इतना आसान है।

दूसरा समाधान :दस्तावेजों पर सीआरयूडी संचालन करने के लिए क्लीनर और सरल और जटिल प्रश्नों को पूर्ववत करने के लिए एकत्रीकरण पाइपलाइन का उपयोग करें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MGO :क्वेरी को कैननिकलाइज़ नहीं कर सकता:BadValue अज्ञात ऑपरेटर:$meta

  2. मजाक के साथ नेवला मॉडल का मजाक उड़ाया

  3. मोंगो-जावा-ड्राइवर मावेन निर्भरता जोड़ते समय स्प्रिंग बूट मोंगो से जुड़ने की कोशिश करता है

  4. mongoDB को सर्वर से कैसे कनेक्ट करें?

  5. नेवला / नेवला - तिथि के अनुसार एकत्रित करना