Luôn luôn là một ý tưởng hay để nhận biết tài nguyên bộ nhớ khi $ thư giãn
ing do quá trình sao chép dữ liệu xảy ra.
Sử dụng $ match
để thu hẹp kết quả cho các tài liệu cụ thể mà bạn đang tìm kiếm tất nhiên là một cách để giảm dung lượng bộ nhớ cần thiết để chứa dữ liệu trả về.
Một cách khác để giảm dung lượng bộ nhớ là sử dụng $ project
. $ project
cho phép bạn sắp xếp lại các tài liệu trong đường dẫn để bạn chỉ trả lại các phần tử mà bạn quan tâm.
Để sử dụng ví dụ của bạn,
{
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"}
]
}
]
}
Với
db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])
sẽ xóa someInfo
và các thuộc tính khác mà bạn có thể không quan tâm. Sau đó, bạn có thể $ project
một lần nữa sau khi giải nén ...
db.collection.aggregate([
{ $match: { <element>: <value> }},
{ $project: { _id: 0, answers: 1}},
{ $unwind: "$answers"},
{ $unwind: "$answers.tags"},
{ $project: { e: "$answers.email", v: "$answers.values"}}
])
sẽ trả về các kết quả khá nhỏ gọn như:
{ 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" } }
Mặc dù các tên thuộc tính một chữ cái làm giảm khả năng đọc của con người, nhưng nó làm giảm kích thước của dữ liệu bị thổi phồng bởi các tên thuộc tính lặp lại dài dòng.