问答中心分类: MONGODB如何从命令行删除 MongoDB 数据库?
0
匿名用户 提问 1小时 前

从我的 bash 提示符中执行此操作的最简单方法是什么?

Jesse Pollak 回复 1小时 前

看到这个问题:stackoverflow.com/questions/3366397/….从 mongo shell 很容易做到这一点。

21 Answers
0
mnemosyn 回答 1小时 前

最好的方法是从 mongodb 控制台:

> use mydb; 
> db.dropDatabase();

或者,您可以停止mongod并从您的数据目录中删除数据文件,然后重新启动。
提示:您还可以将数据文件移动到子文件夹,如果您确定不再需要它们,则将其删除。

Remon van Vliet 回复 1小时 前

我认为他的意思是直接从提示开始,不是吗?在这种情况下,您要么必须使用这些命令生成一个 .js 文件,然后使用“mongo dropdb.js”或其他东西从提示符调用它,要么按照您所说的操作并手动删除文件。

Betlista 回复 1小时 前

但请注意,您不能使用use.js 文件中的命令,您必须连接到具体的数据库(为 mongo 命令指定 dbname)

Chris Allen Lane 回复 1小时 前

专业提示:删除数据库后,您可能希望退出 mongo shell 并删除您的~/.dbshell文件以清除您的命令历史记录。 (可能有更好的方法 – 我不确定。)我这样做是因为,与 SQL 不同,mongo 命令删除数据库实际上并没有引用要删除的数据库的名称– 它只是删除客户端当前连接的数据库。清除您的命令历史记录将防止您意外重播dropDatabase命令并无意中删除了第二个数据库。

mnemosyn 回复 1小时 前

这是一个聪明的主意,@chrisallenlane。 mongodb shell 有时是一个相当危险的工具…… 🙂

Lekr0 回复 1小时 前

警告:如果删除数据库并创建具有相同名称的新数据库,则必须重新启动所有 mongos 实例,或者在读取或写入该数据库之前对所有 mongos 实例使用 flushRouterConfig 命令。此操作可确保 mongos 实例刷新其元数据缓存,包括新数据库的主分片的位置。否则,mongos 可能会丢失读取数据并将数据写入错误的分片。

Wernfried Domscheit 回复 1小时 前

@Lekr0 在 MongoDB 4.4 和更新版本中flushRouterConfig不再需要,请参阅改进的路由表更新

Banik 回复 1小时 前

拜托,任何人,不要像我一样愚蠢,并停止所有可能使用 Mongo 的后台程序,因为它可以(显然)创建您刚刚删除的数据库并使其看起来像 dropDatabase() 命令不'根本不工作。

0
Alex Baban 回答 1小时 前

我发现这很容易记住:

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 }
0
mikemaccana 回答 1小时 前

你不需要 heredocs 或 eval,mongo本身可以充当解释器。

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

使文件可执行并运行它。

Vegard 回复 1小时 前

请注意,脚本名称必须以.js, 否则将被解释为 db 地址。

mikemaccana 回复 1小时 前

@Vegard 那不正确。你在跑步mongo filename这是不必要的 – 该文件的顶行已经有一个解释器。只需使文件可执行并运行它./filename

Vegard 回复 1小时 前

@mikemaccana 我知道,但是这样做./filename实际上会运行/usr/bin/env mongo filename, 正确的?所以如果filename并没有结束.py, mongo 不会将该参数识别为要运行的脚本。

mikemaccana 回复 1小时 前

“执行 ./filename 实际上会运行 /usr/bin/env mongo 文件名,对吗?”不,检查输出ps.

kbolino 回复 1小时 前

@mikemaccana 的输出ps仅向您显示调用时正在运行的内容ps,而不是链exec导致该点的调用也不是内核为加载和执行文件所做的工作。如果你想知道到底发生了什么,你应该使用写一个包装器/usr/bin/env,将其设置为 shebang 行中的可执行文件,然后使用strace.

kbolino 回复 1小时 前

@Vegard 是正确的(除了它需要.js并不是.py) 如果您的文件名没有以.js

mikemaccana 回复 1小时 前

@kbolino ack re strace 或 systemtap 比 ps 时间点更好,但 Vegard 声明这将尝试运行/usr/bin/env mongo filename因此文件必须以.py可证明是不正确的。

kbolino 回复 1小时 前

@mikemaccana 只是因为它应该是.js— 内核将执行相当于/usr/bin/env mongo filename这最终将导致调用mongo filename对于一些mongo在路径上,这意味着文件名将被视为数据库名称,而不是要执行的脚本,除非它以.js,根据文档(并且文档在这一点上是准确的,至少对于 3.x)

kbolino 回复 1小时 前

@mikemaccana 无论实际执行什么,文件名都需要以结尾.js是可测试的(同样,至少在 3.x 上)。创建一个名为foo,复制并粘贴您答案的确切内容,chmod +x foo,然后运行./foo.它将失败,失败消息将包括connecting to: mongodb://./foo.将文件名更改为foo.js它有效。

mikemaccana 回复 1小时 前

@kbolino 解释器由 Unix/Linux 而不是 Mongo 处理,答案已经过测试。除非 Mongo 本身现在是 Python 解释器而不是 Mongo 3 中的 JS 解释器,否则结果不应该改变。

kbolino 回复 1小时 前

@mikemaccana 它与 Python 无关(这只是许多评论前的错字)。文件名必须以.js或者 Mongo 不会解释它根本因为它将参数视为要使用的数据库的名称,而不是要执行的脚本。

mikemaccana 回复 1小时 前

@kbolino 重复:解释器由 Unix/Linux 而不是 Mongo 处理。还要重复:试试看。

kbolino 回复 1小时 前

@mikemaccana 一年前,我用 3.0.5 尝试过。我刚刚用 3.4.6 又试了一次。一年来什么都没有改变。文件名必须以.js.我已经发布了演示问题的确切步骤。我恭敬地请求试试我所做的,看看自己。

kbolino 回复 1小时 前

为了清楚起见,这里有一系列的 shell 命令来演示这个问题:pastebin.com/Tpt474te

kbolino 回复 1小时 前

mongo/shell/shell_options.cpp:400显示参数解析逻辑和原因.js是必须的;但是,这也表明解决这个问题的另一种方法是制作shebang线#!/usr/bin/env mongo --nodb— 然后你可以使用你喜欢的任何文件扩展名(或者根本不使用)

0
user2719890user2719890 回答 1小时 前

启动 MongoDB
数据库删除命令是:
1.首先选择要删除的数据库

use < database name >

2.然后用这个..

db.dropDatabase()
0
David 回答 1小时 前

您还可以使用“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 用于此类事情,以防您需要更复杂的命令序列。