MongoDB 基础系列十五:增删查改 CRUD 之 Query - Delete

前言

此篇博文是 Mongdb 基础系列之一;

本文为作者的原创作品,转载需注明出处;

简介

本章将描述如何通过 mongo shell 进行 delete 操作,主要描述如下方法,

本章内容将会采用如下的测试数据,

1
2
3
4
5
6
7
db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
]);

删除全部数据

1
> db.inventory.deleteMany({})

使用一个空的 filter {} 来使用 db.collection.deleteMany() 方法,即可删除所有;

删除匹配条件的所有 documents

使用相等匹配的方式

格式,

1
{ <field1>: <value1>, ... }

例子,

1
db.inventory.deleteMany({ status : "A" })

这样会删除 inventory 中 status 字段等于 “A” 的所有 documents;

使用操作符的方式

格式,

1
{ <field1>: { <operator1>: <value1> }, ... }

删除匹配条件的单个 document

使用 db.collection.deleteOne() 方法进行删除单个文档,即便是有多个文档被删除条件匹配,也只有第一个文档被删除;

比如,下面这个例子只有第一个 status 等于 “D” 的文档将会被删除掉,

1
db.inventory.deleteOne( { status: "D" } )

相关特性

Indexes

Delete operations do not drop indexes, even if deleting all documents from a collection.

Atomicity

所有写入操作(包含删除)的事务原子性都是在单个 document 级别之上的;

Write Acknowledgement

With write concerns, you can specify the level of acknowledgement requested from MongoDB for write operations. For details, see Write Concern.