بدءًا من التواريخ التي لا تُفرز بشكل صحيح ....
إذا كنت تقوم بتخزين موعد ك string
, ، يجب أن تكون قابلة للفرز كسلسلة. انها بسيطة جدا:
2013-11-08 // yyyy-mm-dd (the dashes would be optional)
طالما أن كل قطعة من سلسلة التاريخ مبطنة 0
بشكل صحيح ، سيتم فرز السلاسل بشكل طبيعي والطريقة التي تتوقعها.
يتم تخزين بوقت موعد كامل في UTC عادة:
2013-11-23T10:46:01.914Z
لكنني أقترح عليك أيضًا بدلاً من تخزين قيمة التاريخ كسلسلة ، فأنت تفكر فيما إذا كان استخدام تاريخ MongoDB الأصلي سيكون أكثر منطقية (المرجعي). إذا نظرت إلى إطار تجميع MongoDB ، فستجد أن هناك الكثير المهام يمكن أن تعالج هذه التواريخ ، في حين أن السلسلة محدودة للغاية.
فيما يتعلق بفرز السلسلة ، تمت الإشارة إلى أنه يتم فرزه مثل الكمبيوتر يخزن البيانات بدلاً من الطريقة التي ستقوم بفرزها كشخص. إذا كنت تفكر في تخزين السلسلة كتمثيل ASCII/UTF-8 ، فيجب أن ترى لماذا يعمل الفرز كما هو:
Zoe = [90, 111, 101]
geo = [103, 101, 111]
إذا كنت ترغب في فرز أولئك في ترتيب تنازلي كما هو محدد ، فيجب أن ترى كيف "geo"
تمثيل البايت الداخلي أكبر من تمثيل السلسلة "Zoe"
(مع 103
فرز أعلى من 90
في هذه الحالة).
عادةً ما تكون التوصية عند استخدام MongoDB هي تخزين الأوتار مرتين إذا كنت بحاجة إلى فرز سلسلة تحتوي على حالة مختلطة:
- السلسلة الأصلية (
"Title"
)
- كسلسلة طبيعية. ربما على سبيل المثال ، ربما يتم تحويل كل شيء "صغير" مع أحرف معلمة أيضًا إلى حرف مشترك. لذا ، سينتهي بك الأمر بحقل جديد يدعى
"SortedTitle"
على سبيل المثال ، وسيستخدم الرمز الخاص بك ذلك لفرز ، ولكن عرض الفعلي "Title"
للمستخدمين.