जब $unwind
होने वाले डेटा की प्रतिकृति के कारण आईएनजी।
$match का इस्तेमाल करना
परिणामों को उन विशिष्ट दस्तावेज़ों तक सीमित करने के लिए जिन्हें आप खोज रहे हैं, निश्चित रूप से लौटाए गए डेटा को रखने के लिए आवश्यक स्मृति की मात्रा को कम करने का एक तरीका है।
मेमोरी फ़ुटप्रिंट को कम करने का दूसरा तरीका है $project कोड>
. $project आपको पाइपलाइन में दस्तावेज़ों को फिर से व्यवस्थित करने की अनुमति देता है ताकि आप केवल उन्हीं तत्वों को वापस कर सकें जिनमें आप रुचि रखते हैं।
अपने उदाहरण का उपयोग करने के लिए,
{
someInfo: "blah blah blah",
answers: [
{
email: "example@sqldat.com",
values: [
{value: 1, label: "test1"},
{value: 2, label: "test2"}
]
},
{
email: "example@sqldat.com",
values: [
{value: 6, label: "test1"},
{value: 1, label: "test2"}
]
}
]
}
साथ
db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])
someInfo को हटा देगा और अन्य विशेषताएँ जिनमें आपकी रुचि नहीं हो सकती है। तब आप $project फिर से खोलने के बाद...
db.collection.aggregate([
{ $match: { <element>: <value> }},
{ $project: { _id: 0, answers: 1}},
{ $unwind: "$answers"},
{ $unwind: "$answers.tags"},
{ $project: { e: "$answers.email", v: "$answers.values"}}
])
काफी कॉम्पैक्ट परिणाम देगा जैसे:
{ e: "example@sqldat.com", v: { value: 1, label: "test1" } }
{ e: "example@sqldat.com", v: { value: 2, label: "test2" } }
{ e: "example@sqldat.com", v: { value: 6, label: "test1" } }
{ e: "example@sqldat.com", v: { value: 1, label: "test2" } }
हालांकि एकल अक्षर विशेषता नाम मानव-पठनीयता को कम करते हैं, यह डेटा के आकार में कटौती करता है जो लंबे समय तक दोहराए गए विशेषता नामों से फुलाया जाता है।