MongoDB 3.2 अब $lookup एकत्रीकरण चरण के माध्यम से एक से अधिक संग्रह से डेटा को एक में संयोजित करने की अनुमति देता है। एक व्यावहारिक उदाहरण के रूप में, मान लें कि आपके पास पुस्तकों के बारे में डेटा दो अलग-अलग संग्रहों में विभाजित है।
पहला संग्रह, जिसे books
कहा जाता है , निम्नलिखित डेटा होना:
{
"isbn": "978-3-16-148410-0",
"title": "Some cool book",
"author": "John Doe"
}
{
"isbn": "978-3-16-148999-9",
"title": "Another awesome book",
"author": "Jane Roe"
}
और दूसरा संग्रह, जिसे books_selling_data
. कहा जाता है , निम्नलिखित डेटा होना:
{
"_id": ObjectId("56e31bcf76cdf52e541d9d26"),
"isbn": "978-3-16-148410-0",
"copies_sold": 12500
}
{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 720050
}
{
"_id": ObjectId("56e31ce076cdf52e541d9d29"),
"isbn": "978-3-16-148999-9",
"copies_sold": 1000
}
दोनों संग्रहों को मर्ज करने के लिए निम्नलिखित तरीके से $lookup का उपयोग करने की बात है:
db.books.aggregate([{
$lookup: {
from: "books_selling_data",
localField: "isbn",
foreignField: "isbn",
as: "copies_sold"
}
}])
इस एकत्रीकरण के बाद, books
संग्रह निम्न जैसा दिखेगा:
{
"isbn": "978-3-16-148410-0",
"title": "Some cool book",
"author": "John Doe",
"copies_sold": [
{
"_id": ObjectId("56e31bcf76cdf52e541d9d26"),
"isbn": "978-3-16-148410-0",
"copies_sold": 12500
}
]
}
{
"isbn": "978-3-16-148999-9",
"title": "Another awesome book",
"author": "Jane Roe",
"copies_sold": [
{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 720050
},
{
"_id": ObjectId("56e31ce076cdf52e541d9d28"),
"isbn": "978-3-16-148999-9",
"copies_sold": 1000
}
]
}
कुछ बातों का ध्यान रखना ज़रूरी है:
- इस मामले में "से" संग्रह,
books_selling_data
, शार्प नहीं किया जा सकता। - उपरोक्त उदाहरण के अनुसार "as" फ़ील्ड एक सरणी होगी।
- $लुकअप चरण पर "लोकलफ़ील्ड" और "विदेशी फ़ील्ड" दोनों विकल्पों को मिलान उद्देश्यों के लिए शून्य माना जाएगा यदि वे अपने संबंधित संग्रह में मौजूद नहीं हैं ($लुकअप डॉक्स के पास इसके बारे में एक आदर्श उदाहरण है)।ली>
इसलिए, एक निष्कर्ष के रूप में, यदि आप दोनों संग्रहों को समेकित करना चाहते हैं, इस मामले में, एक फ्लैट प्रतियां_बिकी हुई कुल प्रतियों के साथ फ़ील्ड, आपको थोड़ा और काम करना होगा, शायद एक मध्यस्थ संग्रह का उपयोग करके, फिर, अंतिम संग्रह के लिए $आउट हो।