आप N+1
. से बच सकते हैं -$inका उपयोग करके सैकड़ों अनुरोधों की समस्या कोड>
-प्रश्न। इस पर विचार करें:
Post {
PosterId: ObjectId
Text: string
Comments: [ObjectId, ObjectId, ...] // option 1
}
Comment {
PostId: ObjectId // option 2 (better)
Created: dateTime,
AuthorName: string,
AuthorId: ObjectId,
Text: string
}
अब आप पोस्ट टिप्पणियों को $in
. के साथ पा सकते हैं क्वेरी, और आप किसी विशिष्ट लेखक द्वारा की गई सभी टिप्पणियों को आसानी से ढूंढ सकते हैं।
बेशक, आप टिप्पणियों को पोस्ट में एक एम्बेडेड सरणी के रूप में भी स्टोर कर सकते हैं, और एक $in
perform प्रदर्शन कर सकते हैं जब आप टिप्पणियां प्राप्त करते हैं तो उपयोगकर्ता की जानकारी पर पूछताछ करते हैं। इस तरह, आपको उपयोगकर्ता नामों को सामान्य करने की आवश्यकता नहीं है और फिर भी आपको सैकड़ों प्रश्नों की आवश्यकता नहीं है।
यदि आप उपयोगकर्ता नामों को असामान्य बनाना चुनते हैं, तो आपको उस उपयोगकर्ता द्वारा की गई सभी टिप्पणियों को अपडेट करना होगा जब कोई उपयोगकर्ता बदलता है उदा। उसका नाम। दूसरी ओर, यदि ऐसे ऑपरेशन बहुत बार नहीं होते हैं, तो यह कोई बड़ी बात नहीं होनी चाहिए। या हो सकता है कि आपकी आवश्यकताओं के आधार पर उस उपयोगकर्ता के नाम को संग्रहीत करना और भी बेहतर हो, जब उसने टिप्पणी की थी।
एम्बेड करने के साथ एक सामान्य समस्या यह है कि -in-mongodb">अलग-अलग लेखक एक ही वस्तु पर लिखेंगे
, इसलिए आपको परमाणु संशोधक
का उपयोग करना होगा (जैसे $पुश
) मैपर्स के साथ इसका उपयोग करना कभी-कभी कठिन होता है (हालांकि मुझे मोंगोलेकेमी नहीं पता), और आम तौर पर कम लचीला होता है।