- MongoDB进阶与实战:微服务整合、性能优化、架构管理
- 唐卓章
- 526字
- 2021-05-19 17:44:40
2.6 删除文档
2.6.1 删除单个文档
执行下面的命令,删除单个book文档:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_46_2.jpg?sign=1739591753-9UCTUAvs5lQaiXfNUy6wJEOgw1OwbCh4-0-fa0e58e6a38c52f9d267269ea00eeba6)
注意:remove命令会删除匹配条件的全部文档,由于_id是唯一的,所以上述命令最多只会删除一个文档。如果希望明确限定只删除一个文档,则需要指定justOne参数,命令格式如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_46_3.jpg?sign=1739591753-XCuOwcaAfMN88EdtGPXpJdUwxjskXBst-0-8b9439b0ba1082edbd8526896dfd5340)
例如:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_46_4.jpg?sign=1739591753-y93qBgmtsm3YrH1sEBe5AydyDfp8IrZn-0-1afc5aee1fb87b451914a81434470207)
该命令将会删除满足type:novel条件的首条记录。
MongoDB 3.2版本提供了delete语义的命令,因此也可以使用deleteOne方法来实现删除单个文档,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_46_5.jpg?sign=1739591753-0cwvx9sX548x7ojuV3aEWY9qW2Ito6Fc-0-d7de4f43e440e006f6bec4c606c81002)
2.6.2 删除指定条件文档
指定删除某个分类的book文档,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_1.jpg?sign=1739591753-Kg64jhTGry87joFuNmUDG9Muh7HG6194-0-7c756203348494d036840c5d358589b8)
同样的效果可以使用deleteMany命令实现,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_2.jpg?sign=1739591753-60b87aFZYdHDvEQJsqBX3Kbx099cmyEA-0-e89ac5f25110ca885ed9531da8956075)
2.6.3 删除全部文档
删除全部文档,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_3.jpg?sign=1739591753-FlqSIfod8G4Oke5hMsFCnW61KjGf9VVu-0-df24c45494044af3c80fa64fb505d582)
或者使用deleteMany命令实现,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_4.jpg?sign=1739591753-gyGIGo6ZLJBocluc3UMpdMMxYqpTsZgS-0-c212ab171160105f9841ee1e3a30207e)
remove、deleteMany等命令需要对查询范围内的文档逐个删除,如果希望删除整个集合,则使用drop命令会更加高效,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_5.jpg?sign=1739591753-dkdXtBuceYjNrFTLQJe53IojjyMVMl3Z-0-66b6138c12410c6a336173d93e83c9e4)
drop命令会同时删除集合的全部索引。
同理,如果删除的文档非常多(仅希望保留集合中的一小部分数据),则可以先备份保留数据,执行drop命令之后再重建集合。
2.6.4 返回被删除文档
remove、deleteOne等命令在删除文档后只会返回确认性的信息,如果希望获得被删除的文档,则可以使用findOneAndDelete命令,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_47_6.jpg?sign=1739591753-NDscUutxEbu07lHwuYQkvX9k7oEeLY9H-0-7c9a3407b40e1b0af5c52f56ca8a895b)
除了在结果中返回删除文档,findOneAndDelete命令还允许定义“删除的顺序”,即按照指定顺序删除找到的第一个文档,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_48_1.jpg?sign=1739591753-O14BKktBof17PyV3fT6KMvqoB6Wj9t7w-0-3d447b620f87aee73156cd3013893547)
remove、deleteOne等命令只能按默认顺序删除,利用这些特点,findOneAndDelete可以实现一些有趣的功能,诸如队列的先进先出动作。