如果您指定a <condition>
且数组元素是嵌入式文档,则$pull
运算符将应用,<condition>
就好像每个数组元素都是集合中的文档一样。有关示例,请参阅
从文档数组中删除项目。
如果指定<value>
为remove的是数组,则$pull
仅删除数组中与指定<value>
精确匹配(包括顺序)的元素
。
如果指定<value>
要删除的是文档,则$pull
仅删除数组中具有完全相同的字段和值的元素。字段的顺序可以不同。
给定stores
集合中的以下文档:
下面的操作更新所有文档集合去除"apples"
,并"oranges"
从阵列fruits
和删除"carrots"
从数组vegetables
:
操作之后,fruits
数组不再包含任何
"apples"
或"oranges"
值,并且vegetables
数组不再包含任何"carrots"
值:
一个survey
集合包含以下文件:
以下的操作将从除去results
阵列同时含有所有元素score
字段等于8
和
item
字段等于"B"
:
该$pull
表达式将条件应用于results
数组的每个元素,就好像它是顶级文档一样。
操作之后,该results
数组不包含包含score
等于字段8
和item
等于字段的文档"B"
。
由于$pull
运算符将其查询应用于每个元素,就好像它是顶级对象一样,因此该表达式不需要使用$elemMatch
来指定score
等于8
和的item
字段的条件"B"
。实际上,以下操作不会从原始集合中提取任何元素。
但是,如果survey
集合包含以下文档,则该results
数组包含的嵌入式文档也包含数组:
然后,您可以使用以下命令在answers
数组的元素上指定多个条件
$elemMatch
:
操作从除去results
阵列与那些嵌入的文档answers
包含的至少一种元素与字段q
等于2
和a
大于或等于8
: