কম্পিউটার টিউটোরিয়াল

MongoDB-এ অ্যারে সর্ট করে সব ফিল্ড প্রজেক্ট করা

MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারে সর্ট করে পুরো ডকুমেন্ট (সব ফিল্ডসহ) রিটার্ন করতে অ্যাগ্রিগেশন পাইপলাইনে $unwind, $sort, $group, এবং $project স্টেজ একসাথে ব্যবহার করা হয়।

নমুনা কালেকশন তৈরি

> db.demo252.insertOne({
  "Values": [ 
    { "v1": 20, "v2": 30 }, 
    { "v1": 20, "v2": 20 }, 
    { "v1": 10, "v2": 7 } 
  ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e46c2761627c0c63e7dba78") }

ডকুমেন্ট দেখানো (সর্ট করার আগে)

> db.demo252.find();

আউটপুট:

{ 
  "_id": ObjectId("5e46c2761627c0c63e7dba78"), 
  "Values": [ 
    { "v1": 20, "v2": 30 }, 
    { "v1": 20, "v2": 20 }, 
    { "v1": 10, "v2": 7 } 
  ] 
}

অ্যারে সর্ট এবং সব ফিল্ড প্রজেক্ট করার কোয়েরি

> db.demo252.aggregate([
  { $unwind: "$Values" },
  { $sort: { "Values.v2": 1, "Values.v1": 1 } },
  { $group: { 
      _id: { _id: "$_id" },
      st: { $push: "$Values" }
    } 
  },
  { $project: { 
      _id: "$_id._id", 
      Values: "$st" 
    } 
  }
]);

ফলাফল (v2 অ্যাসেন্ডিং, তারপর v1 অ্যাসেন্ডিং)

{ 
  "_id": ObjectId("5e46c2761627c0c63e7dba78"), 
  "Values": [ 
    { "v1": 10, "v2": 7 }, 
    { "v1": 20, "v2": 20 }, 
    { "v1": 20, "v2": 30 } 
  ] 
}

ব্যাখ্যা:

  1. $unwind: "$Values" - অ্যারের প্রতিটি এলিমেন্টকে আলাদা ডকুমেন্টে রূপান্তর (৩টি ডকুমেন্ট)।
  2. $sort - v2 অ্যাসেন্ডিং, তারপর v1 অ্যাসেন্ডিং অনুযায়ী সর্ট।
  3. $group - মূল _id দিয়ে আবার গ্রুপ করে, $push দিয়ে সর্ট করা অ্যারে পুনর্গঠন।
  4. $project - আউটপুট ফরম্যাট ঠিক করে (_id এবং Values ফিল্ড)।

মূল অ্যারে অর্ডার: (20,30), (20,20), (10,7) → সর্টেড: (10,7), (20,20), (20,30)

সতর্কতা

  • এই পদ্ধতি ডকুমেন্টের অন্যান্য ফিল্ড রাখে না (শুধু _id এবং Values)। সব ফিল্ড রাখতে $first বা $$ROOT ব্যবহার করুন।
  • বড় অ্যারে वाले ডকুমেন্টের জন্য মেমরি ব্যবহার বেশি।

উন্নত পদ্ধতি: $$ROOT সংরক্ষণ

db.demo252.aggregate([
  { $unwind: "$Values" },
  { $sort: { "Values.v2": 1, "Values.v1": 1 } },
  { $group: { 
      _id: "$_id", 
      root: { $first: "$$ROOT" }, 
      sortedValues: { $push: "$Values" } 
    } 
  },
  { $project: { 
      _id: 0, 
      Values: "$sortedValues",
      // অন্যান্য ফিল্ড রুট থেকে
    } 
  }
]);
  1. MongoDB-এ নেস্টেড অ্যারে সর্ট করা

  2. MongoDB-এ অ্যারে ফিল্ডে সব এলিমেন্ট ম্যাচ করা ($all অপারেটর)

  3. MongoDB-তে এমবেডেড ডকুমেন্ট অ্যারে কোয়েরি করে নতুন এলিমেন্ট যোগ করা ($push + $nin)

  4. MongoDB-তে _id বাদে সব ফিল্ড দেখানো (JavaScript ফরইচ + প্রজেকশন)