删除文档
概述
在这份指南中,您可以学习如何使用MongoDB Java驱动程序删除文档。
您可以通过传递一个查询过滤器到deleteOne()
、deleteMany()
或findOneAndDelete()
方法来删除文档。
deleteOne()
方法删除单个文档。如果查询过滤器匹配多个文档,则该方法将删除集合中匹配的第一个文档。
deleteMany()
方法删除所有与查询过滤器匹配的文档。
findOneAndDelete()
方法原子性地查找并删除集合中匹配的第一个文档。
要指定排序或提示索引,请将DeleteOptions
作为deleteOne()
和deleteMany()
方法的第二个参数使用。
要指定排序、提示索引、指定返回文档上的投影或指定排序顺序,请将FindOneAndDeleteOptions
作为findOneAndDelete()
方法的第二个参数使用。
示例文档
以下示例涉及一家销售八种不同颜色的油漆的油漆店。该店举办了一年一度的在线促销活动,结果在其paint_inventory
集合中产生了以下文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 3, "color": "blue", "qty": 0 } { "_id": 4, "color": "white", "qty": 0 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 6, "color": "pink", "qty": 0 } { "_id": 7, "color": "green", "qty": 0 } { "_id": 8, "color": "black", "qty": 8 }
删除多个文档
涂料店网站显示 paint_inventory
集合中的所有文档。为了减少顾客的困惑,商店想要删除已售罄的颜色。
要删除已售罄的颜色,查询 paint_inventory
集合中 qty
为 0
的文档,并将查询传递给 deleteMany()
方法
Bson filter = Filters.eq("qty", 0); collection.deleteMany(filter);
以下展示了 paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 8, "color": "black", "qty": 8 }
删除一个文档
商店正在捐赠剩余的黄色涂料数量。这意味着黄色涂料的 qty
现在是 0
,我们需要从集合中删除黄色。
要删除黄色,查询 paint_inventory
集合中 color
为 "yellow"
的文档,并将查询传递给 deleteOne()
方法
Bson filter = Filters.eq("color", "yellow"); collection.deleteOne(filter);
以下展示了 paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 8, "color": "black", "qty": 8 }
查找并删除一个文档
商店希望抽签剩余的紫色油漆数量,并从 paint_inventory
集合中移除紫色。
要选择颜色,查询 paint_inventory
集合中颜色为 "purple"
的记录,并将查询传递给 findOneAndDelete()
方法。
Bson filter = Filters.eq("color", "purple"); System.out.println(collection.findOneAndDelete(filter).toJson());
与其它删除方法不同,findOneAndDelete()
返回被删除的文档。
{ "_id": 2, "color": "purple", "qty": 8 }
注意
如果查询过滤器没有匹配项,则不会删除任何文档,并且该方法返回 null
。
以下展示了 paint_inventory
集合中剩余的文档
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
有关本指南中提到的方法和类的更多信息,请参阅以下资源
deleteOne() API 文档
deleteMany() API 文档
findOneAndDelete() API 文档
DeleteOptions API 文档
FindOneAndDeleteOptions API 文档
db.collection.deleteOne() 服务器手册条目
db.collection.deleteMany() 服务器手册条目
db.collection.findOneAndDelete() 服务器手册条目