MongoDB 批量删除子文档(列表类型)下的匹配对象

今天遇到在 MongoDB 中,要批量删除子文档(列表类型)中的匹配对象。

首先想到用$pullAll来实现,结果失败。查找文档得知,$pullAll要求待删除的对象完全匹配。而$pull也可以在一次执行过程中删除多个匹配的子文档,所以改用$pull后实现。现在将示例数据和操作代码整理如下,文档为:

鉴于“凤姐”和“芙蓉姐姐”都去美国发展,所以抹去此二人,使用一条语句完成该删除操作,代码如下:

到此功能完成。又遇到另一问题,旧的已去,新的要来。比如现在要加入作家“小四”和舞蹈演员“迭戈·科斯塔”,可以使用

$addToSet向 members 添加。但是却不能写入上面的操作语句。文档中提到,不能在同一语句中对一个 field 执行两种不同的增/删/改操作。所以需要分两次执行 update。


阅读全文 »