जब $unwind
होने वाले डेटा की प्रतिकृति के कारण आईएनजी।
$match
का इस्तेमाल करना
परिणामों को उन विशिष्ट दस्तावेज़ों तक सीमित करने के लिए जिन्हें आप खोज रहे हैं, निश्चित रूप से लौटाए गए डेटा को रखने के लिए आवश्यक स्मृति की मात्रा को कम करने का एक तरीका है।
मेमोरी फ़ुटप्रिंट को कम करने का दूसरा तरीका है $project
कोड>
. $project
आपको पाइपलाइन में दस्तावेज़ों को फिर से व्यवस्थित करने की अनुमति देता है ताकि आप केवल उन्हीं तत्वों को वापस कर सकें जिनमें आप रुचि रखते हैं।
अपने उदाहरण का उपयोग करने के लिए,
{
someInfo: "blah blah blah",
answers: [
{
email: "[email protected]",
values: [
{value: 1, label: "test1"},
{value: 2, label: "test2"}
]
},
{
email: "[email protected]",
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: "[email protected]", v: { value: 1, label: "test1" } }
{ e: "[email protected]", v: { value: 2, label: "test2" } }
{ e: "[email protected]", v: { value: 6, label: "test1" } }
{ e: "[email protected]", v: { value: 1, label: "test2" } }
हालांकि एकल अक्षर विशेषता नाम मानव-पठनीयता को कम करते हैं, यह डेटा के आकार में कटौती करता है जो लंबे समय तक दोहराए गए विशेषता नामों से फुलाया जाता है।