MongoDB-এ ডকুমেন্টগুলো ডিস্কে সংরক্ষিত থাকার ফিজিক্যাল অর্ডার (natural order) অনুযায়ী সর্ট করার জন্য $natural অপারেটর ব্যবহার করা হয়। এটি সাধারণত ইনসার্শন অর্ডার (insertion order) নির্দেশ করে, তবে ডকুমেন্ট মুভ (move) হলে পরিবর্তন হতে পারে।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo684.insertOne({ Value: 10 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea530cea7e81adc6a0b3957") }
> db.demo684.insertOne({ Value: 50 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea530d1a7e81adc6a0b3958") }
> db.demo684.insertOne({ Value: 60 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea530d4a7e81adc6a0b3959") }
> db.demo684.insertOne({ Value: 40 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea530d8a7e81adc6a0b395a") }
সব ডকুমেন্ট দেখানো (ডিফল্ট অর্ডার)
> db.demo684.find();
আউটপুট (ইনসার্শন অর্ডার):
{ "_id" : ObjectId("5ea530cea7e81adc6a0b3957"), "Value" : 10 }
{ "_id" : ObjectId("5ea530d1a7e81adc6a0b3958"), "Value" : 50 }
{ "_id" : ObjectId("5ea530d4a7e81adc6a0b3959"), "Value" : 60 }
{ "_id" : ObjectId("5ea530d8a7e81adc6a0b395a"), "Value" : 40 }
_id অনুযায়ী সর্ট (Ascending)
> db.demo684.find().sort({ '_id': 1 });
আউটপুট (এখানে _id এবং ন্যাচারেল অর্ডার একই):
{ "_id" : ObjectId("5ea530cea7e81adc6a0b3957"), "Value" : 10 }
{ "_id" : ObjectId("5ea530d1a7e81adc6a0b3958"), "Value" : 50 }
{ "_id" : ObjectId("5ea530d4a7e81adc6a0b3959"), "Value" : 60 }
{ "_id" : ObjectId("5ea530d8a7e81adc6a0b395a"), "Value" : 40 }
$natural ব্যবহার করে সর্ট
> db.demo684.find().sort({ $natural: 1 });
আউটপুট (ফিজিক্যাল স্টোরেজ অর্ডার):
{ "_id" : ObjectId("5ea530cea7e81adc6a0b3957"), "Value" : 10 }
{ "_id" : ObjectId("5ea530d1a7e81adc6a0b3958"), "Value" : 50 }
{ "_id" : ObjectId("5ea530d4a7e81adc6a0b3959"), "Value" : 60 }
{ "_id" : ObjectId("5ea530d8a7e81adc6a0b395a"), "Value" : 40 }
মূল পয়েন্টসমূহ
$natural: 1— ফরওয়ার্ড ন্যাচারেল অর্ডার (ইনসার্শন অর্ডার সাধারণত)۔$natural: -1— রিভার্স ন্যাচারেল অর্ডার (সর্বশেষ ইনসার্টেড প্রথমে)۔- ন্যাচারেল অর্ডার ≠ _id অর্ডার: যদি ডকুমেন্ট আপডেট হয়ে বড় হয় এবং ডিস্কে নতুন জায়গায় মুভ করে, তবে ন্যাচারেল অর্ডার পরিবর্তন হতে পারে।
_id(ObjectId) সবসময় ইনসার্শন টাইম এনকোড করে রাখে। _idদিয়ে সর্ট করাই সবচেয়ে নির্ভরযোগ্য ইনসার্শন অর্ডার পাওয়ার উপায়।- ক্যাপড কালেকশন (Capped Collection)-এ ন্যাচারেল অর্ডার গ্যারান্টি করা থাকে।