Het is altijd een goed idee om op de hoogte te zijn van geheugenbronnen wanneer $unwind
vanwege de replicatie van gegevens die optreedt.
$match
gebruiken
om de resultaten te beperken tot de specifieke documenten waarnaar u op zoek bent, is natuurlijk een manier om de hoeveelheid geheugen die nodig is om de geretourneerde gegevens te bewaren, te verminderen.
Een andere manier om de geheugenvoetafdruk te verkleinen is met $project
. $project
stelt u in staat om de documenten in de pijplijn te reorganiseren, zodat u alleen de elementen retourneert waarin u geïnteresseerd bent.
Om uw voorbeeld te gebruiken:
{
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"}
]
}
]
}
Met
db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])
zal de someInfo
. verwijderen en andere attributen waarin u misschien niet geïnteresseerd bent. Dan kunt u $project
weer na het ontspannen...
db.collection.aggregate([
{ $match: { <element>: <value> }},
{ $project: { _id: 0, answers: 1}},
{ $unwind: "$answers"},
{ $unwind: "$answers.tags"},
{ $project: { e: "$answers.email", v: "$answers.values"}}
])
zal vrij compacte resultaten opleveren zoals:
{ 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" } }
Hoewel de attribuutnamen met één letter de leesbaarheid voor mensen verminderen, vermindert het de grootte van de gegevens die wordt opgeblazen door lange herhaalde attribuutnamen.