MongoDB 2.2的新功能
$elemMatch
projection运算符提供了另一种方法来更改返回的文档,使其仅包含
第一
匹配的
shapes
元素:
db.test.find(
{"shapes.color": "red"},
{_id: 0, shapes: {$elemMatch: {color: "red"}}});
返回:
{"shapes" : [{"shape": "circle", "color": "red"}]}
$ projection operator
,其中
$
在投影对象中,字段名表示查询中字段的第一个匹配数组元素的索引。以下返回与上面相同的结果:
db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
MongoDB 3.2更新
从3.2版本开始,您可以使用新的
$filter
在投影期间过滤数组的聚合运算符,其好处是
全部的
db.test.aggregate([
{$match: {'shapes.color': 'red'}},
{$project: {
shapes: {$filter: {
input: '$shapes',
as: 'shape',
cond: {$eq: ['$$shape.color', 'red']}
}},
_id: 0
}}
])
结果:
[
{
"shapes" : [
{
"shape" : "circle",
"color" : "red"
}
]
}
]