MongoDB में 'रिलेशनल' क्वेरी बनाने की कोशिश करना हताशा में एक अभ्यास होने जा रहा है। आपका स्कीमा एक संग्रह में कुछ जानकारी (पोस्ट की रेटिंग) और अन्य जानकारी (लेखक की उम्र) को एक अलग संग्रह में संग्रहीत करता है, लेकिन सभी MongoDB क्वेरी एकल संग्रह पर काम करती हैं। जब तक आप अपने डेटा को असामान्य नहीं करते (जो आपने कहा था कि आप नहीं करना चाहते हैं), तो आपको यह काम करने के लिए दो-पास विधि की आवश्यकता होगी।
एक दृष्टिकोण जो काम करना चाहिए वह होगा लेखक आईडी की एक सरणी बनाना और '$in' का उपयोग करके पोस्ट संग्रह की एक क्वेरी में इसका उपयोग करना। यहां बताया गया है कि यह मोंगो शेल का उपयोग करके जावास्क्रिप्ट में कैसा दिख सकता है:
> var authorList = [];
> var authorCursor = db.authors.find({age:{$gt:19,$lt:25}},{"_id":1});
> while(authorCursor.hasNext()){authorList.push(authorCursor.next()["_id"])};
> db.posts.find({"author.$id":{$in:authorList},rating:{$gt:6,$lt:9}});
पहली पंक्ति एक खाली सरणी बनाती है। दूसरी पंक्ति एक कर्सर बनाती है जो _id
. का चयन करेगा आपकी लक्षित आयु सीमा के सभी लेखकों के क्षेत्र। तीसरी पंक्ति लेखक की एक सरणी को पॉप्युलेट करने के लिए कर्सर का उपयोग करती है _id
एस। चौथी पंक्ति आपके लक्ष्य मानदंड से मेल खाने वाली सभी पोस्ट प्रदर्शित करती है:लेखक _id
सूची में हम आपके द्वारा निर्दिष्ट सीमा में ही बनाते हैं और रेटिंग करते हैं।