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

समग्र ढांचे के साथ एक नया सरणी फ़ील्ड कैसे बनाएं

आधुनिक मोंगोडीबी रिलीज में मौजूदा दस्तावेज़ गुणों का उपयोग करके सरणी को केवल नोट करना सबसे प्रभावी तरीका है। MongoDB 3.2 में सरणियों का प्रत्यक्ष संकेतन पेश किया गया था:

db.collection.aggregate([
  { "$project": {
    "lat": 1,
    "long": 1,
    "geometry": {
      "type": { "$literal": "Point" },
      "coordinates": [ "$lat", "$long" ]
    }
  }},
  { "$out": "newcollection" }
])

या यहां तक ​​कि $addFields का इस्तेमाल भी कर सकते हैं दस्तावेज़ों में नई संपत्ति को केवल "संलग्न" करने के लिए:

db.collection.aggregate([
  { "$addFields": {
    "geometry": {
      "type": { "$literal": "Point" },
      "coordinates": [ "$lat", "$long" ]
    }
  }},
  { "$out": "newcollection" }
])

यदि आप MongoDB 2.6 और इसके बाद के संस्करण का उपयोग कर रहे हैं तो आप इसे एकत्रीकरण ढांचे के साथ कर सकते हैं और एक नया संग्रह बनाने के लिए अपने क्लाइंट प्रोग्राम में लूपिंग परिणामों से बच सकते हैं।

यहां मुख्य विशेषता जो आपकी मदद करती है, वे हैं $ बाहर आउटपुट को नए संग्रह में भेजने के लिए ऑपरेटर। लेकिन आपको जिस सरणी की आवश्यकता है उसे बनाने के लिए थोड़ा चतुर भी होना चाहिए।

db.collection.aggregate([
    { "$project": {
        "lat": 1,
        "long": 1,
        "type": { "$literal": ["lat","long"] }
    }},
    { "$unwind": "$type" },
    { "$group": {
        "_id": "$_id",
        "lat": { "$first": "$lat" },
        "long": { "$first": "$long" },
        "coordinates": {
            "$push": {
                "$cond": [
                    { "$eq": [ "$type", "lat" ] },
                    "$lat",
                    "$long"
                ]
            }
        }
    }},
    { "$project": {
        "lat": 1,
        "long": 1,
        "geometry": { 
            "type": { "$literal": "Point" },
            "coordinates": "$coordinates"
        }
    }},
    { "$out": "newcollection" }
])

तो यह $literal पाइपलाइन के शीर्ष पर एक नया सरणी निर्दिष्ट करने के लिए ऑपरेटर। यह ऑपरेटर सामग्री को दस्तावेज़ संपत्ति में रखेगा बिल्कुल इसकी आपूर्ति कैसे की जाती है। इसलिए किसी भी परिवर्तनशील प्रतिस्थापन की अनुमति नहीं है, इसलिए "शाब्दिक"।

"समन्वय" सरणी बनाने के लिए, हम बस उस पहली सरणी को खोलते हैं जो अनिवार्य रूप से "प्रकार" में एक अलग मूल्य के साथ प्रत्येक दस्तावेज़ में से दो बनाती है। इसके बाद इसका उपयोग $group सशर्त रूप से चरण $push या तो उस सरणी पर "$lat" या "$long" मान।

अंत में $project का उपयोग करें दस्तावेज़ संरचना को अंतिम रूप देने के लिए और फिर $out सभी आउटपुट को नए संग्रह में भेजता है।

ध्यान दें कि यह केवल तभी समझ में आता है जब आपका इरादा एक नया संग्रह बनाना और "ओवर द वायर" ट्रैफ़िक भेजने से बचना है। यह आपके दस्तावेज़ को फिर से आकार देने के इरादे से एकत्रीकरण ढांचे के भीतर पूरी तरह से उपयोग नहीं किया जा सकता है, फिर उसी एकत्रीकरण पाइपलाइन में "भू-स्थानिक" क्वेरी करने के इरादे से "भू-स्थानिक" प्रश्न केवल तभी काम करेंगे जब वास्तव में संग्रह पर अनुक्रमित किया जाएगा ।

तो यह आपको एक नया संग्रह बनाने में मदद कर सकता है जैसा आप चाहते हैं, लेकिन कम से कम यह उदाहरण (या वास्तव में दो उदाहरण) के रूप में कार्य करता है कि कैसे समेकन ढांचे के साथ विभिन्न मूल्यों से एक सरणी बनाई जाए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB एकत्रीकरण त्रुटि:पाइपलाइन चरण विनिर्देश ऑब्जेक्ट में बिल्कुल एक फ़ील्ड होना चाहिए

  2. जावा में $cond सहित DBObject में एकत्रीकरण चालू करें

  3. कैसे जांचें कि FindOneAndUpdate का उपयोग करते समय कोई दस्तावेज़ डाला या अपडेट किया गया था या नहीं?

  4. वेबपैक - आपको बंडल में वैकल्पिक निर्भरता की आवश्यकता कैसे है (saslprep)

  5. मोंगोडब में एसक्यूएल व्यू

© कॉपीराइट http://hi.sqldat.com सर्वाधिकार सुरक्षित