MongoDB - 删除文档
MongoDB - 删除文档
Section titled “MongoDB - 删除文档”本章涵盖了从 MongoDB 集合中删除文档的现代推荐方法:deleteOne() 和 deleteMany()。旧的 remove() 方法现已弃用,在新应用程序中应避免使用。
deleteOne() 方法
Section titled “deleteOne() 方法”使用 deleteOne() 删除最多一个匹配指定过滤器的文档,即使有多个文档匹配。它将删除找到的 第一个 匹配文档。
db.COLLECTION_NAME.deleteOne(<filter>, <options>)考虑一个 shoppingCart 集合。让我们删除用户的一个特定商品,“苹果”。
// 示例数据:db.shoppingCart.insertMany([ { userId: "user123", item: "apples", quantity: 2 }, { userId: "user123", item: "bread", quantity: 1 }, { userId: "user456", item: "apples", quantity: 3 }]);
// 删除 'user123' 的 'apples' 文档db.shoppingCart.deleteOne({ userId: "user123", item: "apples" });此操作返回一个确认结果的文档:
{ "acknowledged": true, "deletedCount": 1}如果没有文档匹配过滤器,deletedCount 将为 0。
deleteMany() 方法
Section titled “deleteMany() 方法”使用 deleteMany() 删除所有匹配指定过滤器的文档。
db.COLLECTION_NAME.deleteMany(<filter>, <options>)假设我们要清除 ‘user123’ 的整个购物车。
// 删除 'user123' 的所有文档db.shoppingCart.deleteMany({ userId: "user123" });
// 结果:{ "acknowledged": true, "deletedCount": 2 // 'apples' 和 'bread' 都被删除了}安全最佳实践:空过滤器的危险
Section titled “安全最佳实践:空过滤器的危险”向 deleteMany() 传递一个空过滤器文档 {} 将删除集合中的 所有 文档。这是一个破坏性且通常不可逆的操作。
// 危险:这将删除 shoppingCart 集合中的所有文档!db.shoppingCart.deleteMany({});在执行 deleteMany 命令之前,请务必仔细检查您的过滤器。如果您的目标是删除整个集合及其索引,使用 db.collection.drop() 更高效。
[已弃用] remove() 方法
Section titled “[已弃用] remove() 方法”db.collection.remove() 方法自 MongoDB v3.2 起已弃用。现代驱动程序和 mongo Shell 如果您使用它会发出警告。您应该更新任何现有代码以使用 deleteOne() 或 deleteMany(),以提高清晰度并与现代最佳实践保持一致。