سؤال

لدي كتالوج المنتجات و أريد أن تصفية من قبل العديد من المعلمات:الفئة, السعر, حجم, لون, 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 محدودة عدد صحيح طول, لا يمكنك الحصول على عدد غير محدود من الصفات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top