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

कुल मोंगो डेटा php

यहां डेटा संरचना एक अच्छा कार्यान्वयन नहीं है, इसमें बहुत सारी समस्याएं हैं कि यह कैसे संरचित है और यह एकत्रीकरण के लिए पूरी तरह से अनुपयुक्त है। यहां की मुख्य समस्याएं हैं:

  • आपकी संरचना वास्तव में किसी भी सरणी का उपयोग नहीं करती है, अभी यह नहीं है

  • सभी विशिष्ट कुंजी नामों में एक वास्तविक समस्या होती है, और इससे बचा जा सकता है।

इसलिए इस प्रकार की संरचना को पार करने का एकमात्र तरीका मैपरेडस के साथ जावास्क्रिप्ट का उपयोग करना है।

मैपर को परिभाषित करना:

var mapper = function () {

  for ( var n in this.versions ) {
    for ( var k in this.versions[n].content ) {
      if (
        ( k != 'confirmed' ) ||
        ( k != 'visited' ) )
          emit(
            {
              type: this.chairtype,
              key: k
            },
            this.versions[n].content[k]
          );
    }
  }

};

तो यह क्या कर रहा है प्रत्येक संस्करण प्रविष्टियों के माध्यम से और फिर सामग्री पर सब कुछ के माध्यम से साइकिल चलाना। कुंजी को आपके इच्छित प्रत्येक सामग्री कुंजी के साथ-साथ "चेयरटाइप" कुंजी द्वारा उत्सर्जित किया जाता है। और मूल्य वह मिलान मूल्य है।

और फिर एक रिड्यूसर:

var reducer = function (key,values) {

    return ( Array.sum( values ) != 0 ) 
        ? Array.sum( values ) / values.length : 0;

};

जो एक ही कुंजी के साथ मैपर के लिए आने वाले सभी मानों से औसत उत्पन्न करने का एक सरल तरीका है।

तो जबकि यह अच्छी तरह से काम करना चाहिए, आपको जो करना चाहिए वह आपकी संरचना को बदल रहा है। तो वास्तव में अगर आपके पास ऐसा कुछ था:

{
    "_id": ObjectId("52b85dfa32b6249513f15897"),
    "parent": "47de3176-bbc3-44e0-8063-8920ac56fdc8",
    "type": "chair",
    "chairtype": "E",
    "content": [
        { "key": "atkswlntfd", "value": 0, "version": 0 },
        { "key": "auwbsjqzir", "value": 0, "version": 0 },
        { "key": "avqrnjzbgd", "value": 0, "version": 0 }
    ]
}

या आम तौर पर उस रूप में कमोबेश, एकत्रीकरण कार्य बहुत सरल हो जाता है:

db.collection.aggregate([
    { "$unwind": "$content" },
    { "$group": {
       "_id": {
           "chairtype": "$chairtype",
           "key": "$content.key"
       },
       "average": { "$avg": "$content.value" }
    }}
])

या इसके किसी अन्य रूपांतर की आवश्यकता है, लेकिन अब यह संरचना को बदलकर संभव बनाया गया है।

तो दस्तावेज़ को अलग तरीके से संरचित किए बिना आपको ऐसा करने के लिए mapReduce का उपयोग करने की आवश्यकता होगी।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो संग्रह के माध्यम से लूप करें और प्रत्येक दस्तावेज़ में एक फ़ील्ड अपडेट करें

  2. विभाजित नहीं हो सकता':खराब यूआरआई (यूआरआई नहीं है?):

  3. nodejs html में ग्रिडएफएस में संग्रहीत छवि प्रदर्शित करता है

  4. Mongodb - खराब क्वेरी:BadValue अज्ञात शीर्ष स्तरीय ऑपरेटर:$gte

  5. मोंगोज़ और एसिंक वॉटरफॉल मॉडल का उपयोग करके मोंगोडीबी में डेटा कैसे स्टोर करें