MongoDB 2.2 mới của $elemMatch
toán tử phép chiếu cung cấp một cách khác để thay đổi tài liệu được trả về để chỉ chứa đầu tiên shapes
phần tử:
db.test.find(
{"shapes.color": "red"},
{_id: 0, shapes: {$elemMatch: {color: "red"}}});
Lợi nhuận:
{"shapes" : [{"shape": "circle", "color": "red"}]}
Trong 2.2, bạn cũng có thể thực hiện việc này bằng cách sử dụng toán tử $ projection operator
, trong đó $
trong tên trường đối tượng chiếu đại diện cho chỉ mục của phần tử mảng phù hợp đầu tiên của trường từ truy vấn. Phần sau trả về kết quả tương tự như trên:
db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
Bản cập nhật MongoDB 3.2
Bắt đầu với bản phát hành 3.2, bạn có thể sử dụng $filter
mới toán tử tổng hợp để lọc một mảng trong quá trình chiếu, có lợi ích là bao gồm tất cả phù hợp, thay vì chỉ kết quả đầu tiên.
db.test.aggregate([
// Get just the docs that contain a shapes element where color is 'red'
{$match: {'shapes.color': 'red'}},
{$project: {
shapes: {$filter: {
input: '$shapes',
as: 'shape',
cond: {$eq: ['$$shape.color', 'red']}
}},
_id: 0
}}
])
Kết quả:
[
{
"shapes" : [
{
"shape" : "circle",
"color" : "red"
}
]
}
]