MongoDB تصفية من قبل العديد من المعلمات (مجمع مؤشر أو لا)
-
29-10-2019 - |
سؤال
لدي كتالوج المنتجات و أريد أن تصفية من قبل العديد من المعلمات:الفئة, السعر, حجم, لون, wieght الخ..
لذا فإن السؤال هو حول الفهرسة.
يمكنني محاولة استخدام مركب مؤشر على جميع الميادين ، و الاستعلام لهم في نفس الترتيب أنا فهرسة لهم.ولكن ماذا لو كنت بحاجة إلى تصفية فقط حسب الحجم واللون ، وبعد ذلك فقط عن طريق سعر & الوزن ؟ إنشاء مجمع مؤشر لكل من الممكن تصفية الاستعلام سيكون مبالغة لأنه قد يكون هناك الكثير من المعلمات.
وذلك بعد بعض البحث وجدت مثيرة للاهتمام النهج
ويقترح هناك استخدام "تطبيع سمات":
{color: "red"} = 10
{weight: 125} = 25
{size: "M"} = 30
والآن مونجو سجل سوف تبدو مثل هذا:
{_id: ..., attributes: [10,25,30]}
ثم يجب أن المؤشر بنسبة سمات و بعد ذلك يمكنني الاستعلام عن هذه الطريقة:
db.items.find(attributes: {$all: [10,25,30]})
أدفاتاجيس هي:
- أصغر الفهارس
- أسرع عمليات البحث
- أي عدد من المعلمات
- سهلا
ما لم undestand هو كيف يمكنني الحصول على تلك الأرقام لكل الخاصية ؟ يتم حسابها بطريقة ما (مثل md5)?أو يجب إنشاء مجموعة مختلفة و تخزين كل قيمة المفتاح-عدد هناك ؟ والحصول على الأرقام من هناك أولا - في كل مرة عندما كنت في حاجة إلى تصفية "البنود" جمع ؟
و ما رأيك في هذا النهج ؟
تحديث: ما إذا كنت سوف تستخدم متصلا سلاسل بدلا من الأرقام ؟
{_id: ..., attributes: ["language.English", "color.red"]}
المحلول
البحث (كفاءة) في متجر الكتالوج هو في الواقع مهمة غير تافهة.
نعم ، يمكنك إنشاء إضافية جمع وتخزين جميع القيم هناك
{name: "language", value: "English", numValue: "13"}
لا, أنت لا تحتاج إلى إعادة الاستعلام هذه المجموعة في كل مرة.حجم البيانات هنا سوف يكون على الأرجح صغيرة حتى تتمكن من ذاكرة التخزين المؤقت في عملية التطبيق.لا ننسى التلميح:وضع دائما السمة مع أدنى أصل الأولى.
وثمة نهج آخر هو استخدام بت اخفاء, ولكن منذ MongoDB محدودة عدد صحيح طول, لا يمكنك الحصول على عدد غير محدود من الصفات.