mongodb - Dynamic mongo projection - a projection that uses a field in the document to determine the projection -


मेरे पास इस तरह एक वस्तु है:

  {डिफ़ॉल्ट: 'x', प्रकार : {X: 1, y: 2, z: 3}}   

क्या यह सिर्फ प्रकार। X का चयन करना संभव है (अर्थात {"types.x" का प्रक्षेपण: 1} ) यह जानने के बिना कि x डिफ़ॉल्ट पहले से है? दो प्रश्नों को स्पष्ट रूप से संभव है और जो मैं देख रहा हूं वह नहीं।

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

  1. प्रत्येक दस्तावेज को _id द्वारा मैप करें और उचित कुंजी का उत्सर्जित करें।
  2. चूंकि केवल एक मूल्य प्रति कुंजी होगा, फ़ंक्शन को कम करने के लिए कॉल नहीं किया जाएगा, लेकिन फ़ंक्शन को कम करने के लिए उपयोग किए जाने वाले वेरिएबल को अभी भी प्रारंभ करने की आवश्यकता है। आप खाली फ़ंक्शन या रिक्त स्ट्रिंग का उपयोग कर सकते हैं।
  3. अपनी पसंद के संग्रह में परिणामों को सहेजने / कम करने, मैप चलाएं।

    mongo में शैल, ऐसा कुछ दिखता है:

      var mapper = function () {var typeValue = this.types [this.default]; Emit (this._id, typeValue); }; Var reducer = ""; Db.types.mapReduce (मैपर, रेड्यूसर, {बाहर: "परिणाम"});   

    यदि आप परिणाम संग्रह की क्वेरी करते हैं, तो आपको निम्नानुसार कुछ मिलेगा:

      & gt; db.results.find (); {"_id": ObjectId ("53d21a270dcfb83c7dba8da9"), "मान": 1}   

    यदि आप जानना चाहते हैं कि डिफ़ॉल्ट मान क्या था, तो आप मैपर को संशोधित कर सकते हैं समारोह के रूप में अच्छी तरह से एक मूल्य के रूप में कुंजी को वापस करने के लिए यह कुछ ऐसा दिखाई देगा:

      var mapper = function () {var प्रकार Value = this.types [this.default], टाइप करें = "प्रकार"। + This.default; Emit (this._id, {key: typeKey, val: typeValue}); };   

    चलाते समय, यह ऐसे परिणाम उत्पन्न करेगा जो निम्न प्रकार से दिखते हैं:

      & gt; db.results.find () सुंदर ()।; {"_id": ObjectId ("53d21a270dcfb83c7dba8da9"), "मान": {"key": "types.x", "val": 1}}   

    ध्यान दें कि यह शायद आपके द्वारा अपेक्षा से अधिक जटिल समाधान हो सकता है, लेकिन मोगोडीबी का उपयोग करने के लिए यह आपके ऐक्सेस में अधिक तर्क न जोड़े बिना ऐसा करने का एकमात्र तरीका है।

Comments

Popular posts from this blog

php - how to change mysql_result($res, 0, "url"); to mysqli -

c# - How to clone a HttpRequestMessage when the original request has Content? -

split - php explode string with Uppercase if lowercase letter exists before it without space -