/ / MongooseJS एक विरोधी पैटर्न आबाद है? - जावास्क्रिप्ट, नोड। जेएस, मोंगोडब, मोनगोज

क्या MongooseJS एक विरोधी पैटर्न populate है? - जावास्क्रिप्ट, node.js, mongodb, mongoose

मैंने कई पोस्ट और गाइडों का उपयोग करके Mongoose और MongoDB में जुड़ने की क्षमता की प्रशंसा की है populate() तरीका।

यह मुझे भ्रमित करता है। यदि आप जॉइन करना चाहते हैं, तो क्या आपको एसक्यूएल डेटाबेस का उपयोग नहीं करना चाहिए? MongoDB में शामिल नहीं होना एक अंतिम उपाय होना चाहिए?

प्रत्येक वस्तु जो उपयोग कर रही है populate() यह लाने के लिए दूसरी क्वेरी करने की आवश्यकता हैडेटा। इसलिए यदि आप एक प्रश्न में 100 आइटम लाते हैं, तो आपको उस डेटा को लाने के लिए 100 अन्य प्रश्न करने होंगे। ऐसा लगता है कि इसे नेस्टेड योजनाओं के रूप में संग्रहीत करना एक बेहतर तरीका है जहां संभव हो।

क्या मैं गलत हूं? है populate() वास्तव में एक शानदार तरीका जो समझ में आता है? या क्या मैं सही हूं कि यह एक अंतिम विकल्प है जिसे आप उन मामलों में उपयोग कर सकते हैं जिनसे बचा जाना चाहिए?

उत्तर:

उत्तर № 1 के लिए 1

populate () doesn "t a भेजें find माता-पिता के प्रति बच्चे के दस्तावेज़ के लिए अनुरोध।

यह एक एकल भेजता है find फ़िल्टर में सभी बच्चे ObjectIds (सभी माता-पिता के!) के साथ।

उदाहरण (mongoose.set("debug", true) कंसोल आउटपुट):

Mongoose: parent.find({}, { fields: {} })   // was called with populate()
Mongoose: child.find({ _id: { "$in": [ ObjectId(A), ObjectId(B), ...] }})

और फिर शायद नोड में बच्चों के माता-पिता "जुड़ते हैं"।

इसलिए अनिवार्य रूप से, केवल 1 आरटीटी जोड़ा गया था। जितना संभव हो, इससे बचने के लिए, मैंने "मेरे कुछ स्कीमाओं को सामान्य उपयोग के मामलों के लिए निरूपित किया है।