无论是$
操作者和$elemMatch
操作者投射第一从基于条件的阵列匹配元件。
该$
操作项目根据从查询语句中的一些条件集合中的每个文件的第一个匹配的数组元素。
该$elemMatch
投影算需要一个明确的条件的说法。这使您可以基于查询中没有的条件进行投影,或者如果您需要基于阵列的嵌入式文档中的多个字段进行投影。有关示例,请参见数组字段限制。
db.collection.find()
在操作的观点不支持$
投影操作。
在处理数组投影时,MongoDB需要满足以下条件:
$
投影文档中只能出现一个位置运算符。$
在查询文档中应仅出现一个数组字段,该字段受投影运算符限制。查询文档中的其他数组字段可能导致未定义的行为。在这些要求下,以下查询不正确:
要在该数组内的文档的多个字段上指定条件,请使用
$elemMatch
查询运算符。以下查询返回grades
数组中的第一个文档,该数组的a mean
大于70,a grade
大于90。
$elemMatch
如果需要单独的条件来选择文档以及在这些文档中选择字段,则必须使用运算符。
集合students
包含以下文档:
在以下查询中,投影
仅返回大于或等于
该字段的第一个元素。{ "grades.$": 1 }
85
grades
该操作返回以下文档:
尽管数组字段grades
可能包含多个大于或等于的元素85
,但$
投影运算符仅返回数组中的第一个匹配元素。
甲students
集合包含下列文件,其中grades
字段是文档的阵列; 每个文档包含三个字段名称grade
,mean
以及std
:
在下面的查询,突起
返回与仅第一元件大于该字段:{ "grades.$": 1 }
mean
70
grades
该操作返回以下文档: