如果您指定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: