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

क्वेरी में सरणी सॉर्ट करें और सभी फ़ील्ड प्रोजेक्ट करें

चूंकि आप दस्तावेज़ पर समूह बना रहे हैं _id आप बस उन फ़ील्ड को रख सकते हैं जिन्हें आप समूह में रखना चाहते हैं _id . फिर आप $project<का उपयोग करके पुनः फॉर्म कर सकते हैं /कोड>

db.c.aggregate([
    { "$unwind": "$array_to_sort"},
    { "$sort": {"array_to_sort.b":1, "array_to_sort:a": 1}},
    { "$group": { 
        "_id": {
            "_id": "$_id",
            "unknown_field": "$unknown_field"
        },
        "Oarray_to_sort": { "$push":"$array_to_sort"}
    }},
    { "$project": {
        "_id": "$_id._id",
        "unknown_field": "$_id.unknown_field",
        "array_to_sort": "$Oarray_to_sort"
    }}
]);

वहां अन्य "चाल" समूहीकरण चरण में सरणी के लिए अस्थायी नाम का उपयोग कर रही है। ऐसा तब होता है जब आप $project और नाम बदलें, आपको प्रोजेक्शन स्टेटमेंट में निर्दिष्ट क्रम में फ़ील्ड मिलते हैं। यदि आपने ऐसा नहीं किया है, तो "array_to_sort" फ़ील्ड क्रम में अंतिम फ़ील्ड नहीं होगी, क्योंकि इसे पिछले चरण से कॉपी किया गया है।

यह $project में एक इच्छित अनुकूलन है। कोड> , लेकिन अगर आप आदेश चाहते हैं तो आप इसे ऊपर के रूप में कर सकते हैं।

पूरी तरह से अज्ञात संरचनाओं के लिए mapReduce चीजों को करने का तरीका है:

db.c.mapReduce(
    function () {
        this["array_to_sort"].sort(function(a,b) {
            return a.a - b.a || a.b - b.b;
        });

        emit( this._id, this );
    },
    function(){},
    { "out": { "inline": 1 } }
)

बेशक इसका एक आउटपुट स्वरूप है जो mapReduce के लिए विशिष्ट है और इसलिए आपके पास बिल्कुल दस्तावेज़ नहीं है, लेकिन सभी फ़ील्ड "मान" के अंतर्गत निहित हैं:

{
    "results" : [
            {
                    "_id" : 0,
                    "value" : {
                            "_id" : 0,
                            "some_field" : "a",
                            "array_to_sort" : [
                                    {
                                            "a" : 1,
                                            "b" : 0
                                    },
                                    {
                                            "a" : 3,
                                            "b" : 3
                                    },
                                    {
                                            "a" : 3,
                                            "b" : 4
                                    }
                            ]
                    }
            }
    ],
}

भविष्य की रिलीज़ (लेखन के रूप में) आपको $$ROOT . का उपयोग करने की अनुमति देती है दस्तावेज़ का प्रतिनिधित्व करने के लिए कुल मिलाकर चर:

db.c.aggregate([
    { "$project": {
        "_id": "$$ROOT",
        "array_to_sort": "$array_to_sort"
    }},
    { "$unwind": "$array_to_sort"},
    { "$sort": {"array_to_sort.b":1, "array_to_sort:a": 1}},
    { "$group": { 
        "_id": "$_id",
        "array_to_sort": { "$push":"$array_to_sort"}
    }}
]);

इसलिए अंतिम "प्रोजेक्ट" चरण का उपयोग करने का कोई मतलब नहीं है क्योंकि आप वास्तव में दस्तावेज़ के अन्य क्षेत्रों को नहीं जानते हैं। लेकिन वे सभी _id . के भीतर समाहित होंगे (मूल सरणी और क्रम सहित) परिणाम दस्तावेज़ का क्षेत्र।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी सॉर्ट ()

  2. mongodb php अद्यतन पर arrayFilters

  3. MongoDB में एक मल्टीकी इंडेक्स बनाएं

  4. तो... यह नोएसक्यूएल चीज़

  5. जब तक रूट के रूप में नहीं चलाया जाता तब तक मोंगोड शुरू करना विफल हो जाता है

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