एक अच्छा मोंगोडब स्कीमा मॉडलिंग वास्तव में इस बात पर निर्भर करता है कि आप अपने डेटा तक कैसे पहुंचते हैं। आपके वर्णित मामले में, आप अपने Memberships.user_id कुंजी को अनुक्रमित करेंगे जो ठीक लगता है। लेकिन जैसे-जैसे आप दर्शकों, संपादकों और प्रशासकों को जोड़ेंगे, आपके दस्तावेज़ का आकार बढ़ता जाएगा। साथ ही, आपका स्कीमा इस तरह की क्वेरी करना मुश्किल बना देगा:
क्वेरी प्रोजेक्ट, जहां user_id xxx संपादक है:
दोबारा, आपको शायद इस तरह की परियोजनाओं से पूछताछ करने की आवश्यकता नहीं है, इसलिए आपकी स्कीमा ठीक दिखती है। लेकिन अगर आपको user_id और भूमिका के आधार पर अपनी परियोजनाओं को क्वेरी करने की आवश्यकता है, तो मैं आपको 'project_membership' संग्रह बनाने की सलाह दूंगा:
db.project_memberships.insert(
{
"project_id" : ObjectId("4d730fcfcedc351d67000032"),
"editors" : [
ObjectId("4d730fcfcedc351d67000002"),
ObjectId("4d730fcfcedc351d67000004")
],
"viewers" : [
ObjectId("4d730fcfcedc351d67000002"),
ObjectId("4d730fcfcedc351d67000004"),
ObjectId("4d730fcfcedc351d67000001"),
ObjectId("4d730fcfcedc351d67000005")
],
"administrator" : [
ObjectId("4d730fcfcedc351d67000011"),
ObjectId("4d730fcfcedc351d67000012")
]
}
)
db.project_memberships.ensureIndex({"editors": 1})
db.project_memberships.ensureIndex({"viewers": 1})
db.project_memberships.ensureIndex({"administrator": 1})
या इससे भी आसान... अपने प्रोजेक्ट स्कीमा पर एक अनुक्रमणिका जोड़ें:
db.projects.ensureIndex({"memberships.role": 1})