Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में सभी मान निकालें और एक ही पंक्ति में प्रदर्शित करें

MongoDB में नेस्टेड सरणी से सभी मान निकालने और उन्हें एकल सरणी में फ़्लैट करने के लिए, एग्रीगेशन पाइपलाइन का उपयोग करें: $unwind (दो बार) → $group साथ $push।

उदाहरण: गहरी नेस्टेड नाम सरणी

> db.demo389.insertOne({
    "details":[
        { "Name":[ "Chris", "David" ] },
        { "Name":[ "Bob", "Mike" ] },
        { "Name":[ "Carol", "Sam" ] },
        { "Name":[ "David", "John" ] }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d1d8f22064be7ab44e7f9") }

दस्तावेज़ देखना

> db.demo389.find();

आउटपुट: नाम सरणी के ऑब्जेक्ट्स की सरणी वाला एक दस्तावेज़।

एग्रीगेशन: सभी नाम फ़्लैट करें

> db.demo389.aggregate([
    { $unwind: "$details" },
    { $unwind: "$details.Name" },
    { $project: { _id: "$_id", Name: "$details.Name" } },
    { $group: { _id: "$_id", out: { $push: "$Name" } } },
    { $project: { _id: 0, NameArray: "$out" } }
]);

परिणाम

{ "NameArray" : [ "Chris", "David", "Bob", "Mike", "Carol", "Sam", "David", "John" ] }

चरण व्याख्या

  1. $unwind "$details": बाहरी सरणी को फ़्लैट करता है (प्रति ऑब्जेक्ट एक दस्तावेज़)।
  2. $unwind "$details.Name": आंतरिक नाम सरणी को फ़्लैट करता है (प्रति नाम एक दस्तावेज़)।
  3. $project: आउटपुट आकार देता है।
  4. $group + $push: नामों को वापस एकल सरणी में संचित करता है।
  5. $project: NameArray के रूप में पुनर्नामित करता है।

वैकल्पिक: $reduce (MongoDB 4.4+, सिंगल पाइपलाइन)

> db.demo389.aggregate([
    { $project: {
        NameArray: {
            $reduce: {
                input: "$details",
                initialValue: [],
                in: { $concatArrays: [ "$$value", "$$this.Name" ] }
            }
        }
    }}
]);

यह अधिक कुशल है और एक ही चरण में फ़्लैट करता है।

  1. - MySQL में सभी पंक्तियों से मान प्राप्त करें और उन्हें अल्पविराम से अलग करके एक ही पंक्ति में प्रदर्शित करें

    GROUP_CONCAT() का उपयोग करके सभी मानों को एक स्ट्रिंग में संयोजित करना इसके लिए GROUP_CONCAT() का उपयोग करें। GROUP BY क्लॉज का उपयोग न करें, क्योंकि GROUP_CONCAT() बेहतर और त्वरित समाधान है। पहले टेबल बनाएं: create table DemoTable1371 ( Id int, CountryName varchar(40) ); Query OK, 0 rows affected

  1. - MySQL में कॉलम मानों को अलग टेक्स्ट के साथ जोड़ें और एकल कॉलम में प्रदर्शित करें

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.93 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(101,Chris); Query OK, 1 row affected (0.25 sec) mysq

  1. - MySQL में सभी कॉलम मानों को कॉमा से अलग करके एक ही पंक्ति में प्रदर्शित करें?

    इसके लिए GROUP_CONCAT() और CONCAT() का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1807 ( Id int ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1807 values(101); Query OK, 1 row affected