如何在命令行中删除MongoDB数据库?

932

从我的bash提示符中最简单的方法是什么?


5
看这个问题:https://dev59.com/oHA75IYBdhLWcg3wT3L8。从mongo shell中删除所有内容非常容易。 - Jesse Pollak
22个回答

1159

就像这样:

mongo <dbname> --eval "db.dropDatabase()"

关于如何从命令行脚本化Shell的更多信息,请参考这里:https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting

编辑:

在Mongo 6.0中,mongo已被移除,并用需要单独安装的mongosh替代。更多信息请参考这里:https://www.mongodb.com/docs/mongodb-shell/#mongodb-binary-bin.mongosh

mongosh中的等效操作为:

mongosh --eval "use <dbname>" --eval  "db.dropDatabase()"

这对我非常有帮助。不知何故,我有一个名为“mean-dev”的旧安装数据库,在mongo shell中输入“mean-dev.dropDatabase()”会导致“ReferenceError:mean未定义”。但是使用此答案中的解决方案就解决了问题。+1 - K. P. MacGregor
22
如果您想获得可读性更高的结果,请使用以下方式:mongo <数据库名称> --eval "printjson(db.dropDatabase())" - Xentatt
1
K. P. MacGregor。你应该使用 "mean-dev" + "db.dropDatabase()"。 - ozma
1
谢谢。以下是如何自定义主机和端口的代码:mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()' - Clemens
1
现在,当“mongo”被移除后,您可以这样做:mongosh <dbname> --eval "printjson(db.dropDatabase())" - Eugene

904

最佳方式是通过 MongoDB 控制台来实现:

> use mydb; 
> db.dropDatabase();

此外,您还可以停止mongod并从数据目录中删除数据文件,然后重新启动。

提示:如果确定不再需要数据文件,您也可以将其移动到子文件夹中,然后将其删除。


3
我认为他的意思是直接从提示符中执行,对吧?在这种情况下,你要么必须生成一个包含这些命令的 .js 文件,并使用 "mongo dropdb.js" 之类的命令从提示符中调用它,要么按照你所说的手动删除文件。 - Remon van Vliet
2
但请注意,在.js文件中不能使用“use”命令,您必须连接到具体的数据库(为mongo命令指定dbname)。 - Betlista
49
专业提示:删除数据库后,您可能希望退出Mongo shell并删除您的 ~/.dbshell 文件以清除命令历史记录。(也许有更好的方法 - 我不确定。)这样做是因为,与SQL不同,Mongo中要删除数据库的命令 实际上并没有提及要删除的数据库的名称 - 它只是删除了客户端当前连接的数据库。清除命令历史记录将防止您意外重放 dropDatabase 命令并无意中删除第二个数据库。 - Chris Allen Lane
3
那是个聪明的想法,@chrisallenlane。有时候,MongoDB shell工具相当危险... :) - mnemosyn
1
警告:如果您删除一个数据库并创建一个具有相同名称的新数据库,则必须重新启动所有mongos实例或在所有mongos实例上使用flushRouterConfig命令,然后才能读取或写入该数据库。此操作确保mongos实例刷新其元数据缓存,包括新数据库的主要分片位置。否则,mongos可能会在读取时丢失数据,并可能将数据写入错误的分片。 - Lekr0
显示剩余2条评论

128

我觉得这个很容易记住:

mongo //to start the mongodb shell

show dbs //to list existing databases

use <dbname> //the <dbname> is the database you'd like to drop

db //should show <dbname> just to be sure I'm working with the right database

db.dropDatabase() //will delete the database & return { "dropped" : "<dbname>", "ok" : 1 }

117

你不需要使用heredocs或evalmongo本身就可以充当解释器。


#!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase();

将文件设为可执行并运行它。


3
请注意,脚本名称必须以 .js 结尾,否则它将被解释为数据库地址。 - Vegard
2
@Vegard,那不正确。您正在运行mongo filename,这是不必要的 - 文件已经在顶部有一个解释器。只需使文件可执行并运行它./filename - mikemaccana
@mikemaccana ps 命令的输出只会显示你在调用 ps 时正在运行的进程,而不会显示导致该进程运行的 exec 调用链或内核加载和执行文件所做的工作。如果你想知道实际发生了什么,应编写一个 /usr/bin/env 的包装器,并将其设置为 shebang 行中的可执行文件,然后使用 strace 启动整个过程。 - kbolino
@kbolino提到了strace或systemtap比ps更好,但Vegard的说法是这将尝试运行/usr/bin/env mongo filename,因此文件必须以.py结尾,这是可以证明是不正确的。 - mikemaccana
无论实际执行什么,文件名以.js结尾的需求是可测试的(至少在3.x上)。创建一个名为foo的脚本,复制并粘贴您答案的确切内容,chmod +x foo,然后运行./foo。它将失败,并且失败消息将包括connecting to: mongodb://./foo。将文件名更改为foo.js,它就可以工作了。 - kbolino
显示剩余10条评论

31

启动 MongoDB

删除数据库的命令是:

1. 首先选择要删除的数据库

use < database name >

2. 接着使用这个...

db.dropDatabase()

29
您还可以使用“heredoc”:
mongo localhost/db <<EOF
db.dropDatabase()
EOF

输出结果类似于:

mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{ "dropped" : "db", "ok" : 1 }    
bye

我喜欢使用heredocs来处理这类问题,以便在需要执行更复杂的一系列命令时能够轻松实现。


23

以下是使用Mongo Shell进行MongoDB的一些有用的删除操作:

要从集合中删除特定文档db.mycollection.remove( {name:"stack"} )

删除集合中的所有文档db.mycollection.remove()

删除集合db.mycollection.drop()

删除数据库:首先使用use mydb命令进入该数据库,然后执行其他操作。

db.dropDatabase()

可以直接从命令提示符或终端运行:mongo mydb --eval "db.dropDatabase()


19

其他方法:

echo "db.dropDatabase()" | mongo <database name>

15

在终端中执行:

mongo // To go to shell

show databases // To show all existing databases.

use <DATA_BASE> // To switch to the wanted database.

db.dropDatabase() // To remove the current database.

1
和这个答案相同(https://dev59.com/WWox5IYBdhLWcg3w95A9#18997305),早在一个月之前就已经给出了。 - Dan Dascalescu

11

打开另一个终端窗口并执行以下命令,

mongodb
use mydb
db.dropDatabase()

该操作的输出应如下所示

MAC:FOLDER USER$ mongodb
> show databases
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
> use mydb
switched to db mydb
>db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
>
请注意,mydb 仍在使用中,因此在那个时候插入任何输入将重新初始化数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接