MongoDB学习笔记(四):删除文档

59 阅读2分钟

一、删除文档

命令语法描述
removedb.<collection>.remove(<query>,<options>)<query>文档定义了删除操作时筛选文档的条件
dropdb.<collection>.drop( { writeConcern: <document>})<writeConcern>文档定义了本次集合删除操作的安全写级别

remove

  • 例子1:
查看银行账户文档

> db.accounts.find({},{ name:1, balance:1, _id:0}).sort( {balance:1})
{  }
{ "name" : "karen" }
{ "name" : "lawrence" }
{ "name" : "david", "balance" : 20 }
{ "name" : "bill", "balance" : 50 }
{ "name" : "bob", "balance" : 50 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "david", "balance" : 99.75 }
{ "name" : "alice", "balance" : 100 }
{ "name" : "charlie", "balance" : 500 }
{ "name" : "george", "balance" : 1000 }
{ "name" : "george", "balance" : 1000 }


删除余额为50的银行账户文档
> db.accounts.remove({ balance:50})
WriteResult({ "nRemoved" : 2 })
> db.accounts.find({},{ name:1, balance:1, _id:0}).sort( {balance:1})
{  }
{ "name" : "karen" }
{ "name" : "lawrence" }
{ "name" : "david", "balance" : 20 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "david", "balance" : 99.75 }
{ "name" : "alice", "balance" : 100 }
{ "name" : "charlie", "balance" : 500 }
{ "name" : "george", "balance" : 1000 }
{ "name" : "george", "balance" : 1000 }

在默认情况下,remove命令会删除所有符合筛选条件的文档

如果只想删除满足筛选条件的第一篇文档,可以使用justOne选项

  • 例子2:
删除一篇余额小于100的银行账户文档

db.accounts.remove(
    { balance: { $lt: 100 } },
    { justOne: true }
)
WriteResult({ "nRemoved" : 1 })
> db.accounts.find({},{ name:1, balance:1, _id:0}).sort( {balance:1})
{  }
{ "name" : "karen" }
{ "name" : "lawrence" }
{ "name" : "david", "balance" : 20 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "irene", "balance" : 80 }
{ "name" : "alice", "balance" : 100 }
{ "name" : "charlie", "balance" : 500 }
{ "name" : "george", "balance" : 1000 }
{ "name" : "george", "balance" : 1000 }

  • 例子3:
删除集合内所有的文档,但是不会删除集合本身索引
db.accounts.remove({})

drop

之前的remove命令可以删除集合内的所有的文档,但是不会删除集合

drop命令可以删除整个集合,包括集合中的所有文档,以及集合的索引

> db.accounts.drop()
true
> show collections
collection

如果集合中的文档数量很多,使用remove命令删除所有文档的效率不高,这种情况下更加有效率的办法是使用drop命令删除集合,然后再创建空集合并创建索引

总结:

使用db.collection.remove()删除文档

使用db.collection.drop()删除集合