Itu selalu merupakan ide yang baik untuk menyadari sumber daya memori ketika $unwind
ing karena replikasi data yang terjadi.
Menggunakan $match
untuk mempersempit hasil ke dokumen tertentu yang Anda cari tentu saja merupakan salah satu cara untuk mengurangi jumlah memori yang diperlukan untuk menyimpan data yang dikembalikan.
Cara lain untuk mengurangi jejak memori adalah dengan $project
. $project
memungkinkan Anda untuk mengatur ulang dokumen dalam alur sehingga Anda hanya mengembalikan elemen yang Anda minati.
Untuk menggunakan contoh Anda,
{
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"}
]
}
]
}
Dengan
db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])
akan menghapus someInfo
dan atribut lain yang mungkin tidak Anda minati. Kemudian Anda dapat $project
lagi setelah melepas lelah...
db.collection.aggregate([
{ $match: { <element>: <value> }},
{ $project: { _id: 0, answers: 1}},
{ $unwind: "$answers"},
{ $unwind: "$answers.tags"},
{ $project: { e: "$answers.email", v: "$answers.values"}}
])
akan mengembalikan hasil yang cukup ringkas seperti:
{ 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" } }
Meskipun nama atribut huruf tunggal mengurangi keterbacaan manusia, hal itu mengurangi ukuran data yang dibesar-besarkan oleh nama atribut yang berulang-ulang.