How do I drop a MongoDB database from the command line?
从我的bash提示符中最简单的方法是什么?
-
看到这个问题:stackoverflow.com/questions/3366397/…。 从mongo shell做起来真的很容易。
-
这个链接可以帮助您codefari.com/2015/03/drop-database-in-mongodb.html
像这样:
1
| mongo <dbname> --eval"db.dropDatabase()" |
有关从命令行编写shell脚本的更多信息,请访问:https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting
-
这在我的案例中非常有用。不知怎的,我有一个来自旧安装的名为"mean-dev"的数据库,并且在mongo shell中输入"mean-dev.dropDatabase()"导致"ReferenceError:mean is not defined"。但是在这个答案中使用解决方案就可以了。 +1
-
如果您想获得人类可读的结果,请按以下方式执行:mongo --eval"printjson(db.dropDatabase())"
-
K. P. MacGregor。你应该是:"使用mean-dev"+"db.dropDatabase()"
最好的方法是从mongodb控制台:
1 2
| > use mydb;
> db.dropDatabase(); |
或者,您可以停止mongod并从数据目录中删除数据文件,然后重新启动。
提示:您还可以将数据文件移动到子文件夹,如果您确定不再需要它们,则将其删除。
-
我觉得他的意思是直接来自提示不是吗?在这种情况下,您必须使用这些命令生成.js文件,并使用"mongo dropdb.js"或其他内容从提示中调用它,或按照您的说法执行并手动删除文件。
-
但请注意,您不能在.js文件中使用use命令,您必须连接到具体的DB(为mongo命令指定dbname)
-
专业提示:删除数据库后,您可能希望退出mongo shell并删除~/.dbshell文件以清除命令历史记录。 (可能有更好的方法 - 我不)我这样做是因为,与SQL不同,删除数据库的mongo命令实际上并没有引用要删除的数据库的名称 - 它只是丢弃了客户端当前连接的数据库。清除命令历史记录将阻止您意外重放dropDatabase命令并无意中删除第二个数据库。
-
这是一个聪明的主意,@ chrisallenlane。 mongodb shell有时是一个非常危险的工具...... :)
-
警告:如果删除数据库并创建具有相同名称的新数据库,则必须重新启动所有mongos实例,或者在读取或写入该数据库之前对所有mongos实例使用flushRouterConfig命令。此操作可确保mongos实例刷新其元数据缓存,包括新数据库的主分片的位置。否则,mongos可能会错过有关读取的数据,并可能将数据写入错误的分片。
您不需要heredocs或eval,mongo本身可以充当解释器。
1 2 3
| #!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase(); |
使文件可执行并运行它。
-
请注意,脚本名称必须以.js结尾,否则将被解释为db地址。
-
@Vegard这不对。你正在运行mongo filename这是不必要的 - 该文件已经在顶行有一个解释器。只需使文件可执行并运行它./filename
-
@mikemaccana我知道,但是./filename实际上会运行/usr/bin/env mongo filename,对吗?因此,如果filename不以.py结尾,mongo将不会将该参数识别为要运行的脚本。
-
"做./filename实际上会运行/ usr / bin / env mongo filename,对吧?"不。检查ps的输出。
-
@mikemaccana ps的输出只显示调用ps时正在运行的内容,而不是显示导致该点的exec调用链,以及内核加载和执行文件所做的工作。如果你想知道真正发生了什么,你应该使用在/usr/bin/env周围写一个包装器,将其设置为shebang行中的可执行文件,然后用strace将整个事件踢掉。
-
@Vegard是正确的(除了它需要.js而不是.py)并且如果您的文件名不以.js结尾它将失败
-
@kbolino ack re strace或systemtap优于ps时间点,但Vegard声明这将尝试运行/usr/bin/env mongo filename,因此文件必须以.py结尾,这可能是不正确的。
-
@mikemaccana只是因为它应该是.js - 内核将执行相当于/usr/bin/env mongo filename的操作,这最终会导致对路径上某些mongo的mongo filename调用,这意味着文件名将被视为数据库名称,而不是要执行的脚本,除非它以.js结尾,每个文档(并且文档在这一点上是准确的,至少为3.x)
-
@mikemaccana无论实际执行什么,文件名以.js结尾的需求都是可测试的(同样,至少在3.x上)。创建一个名为foo的脚本,复制并粘贴答案的确切内容chmod +x foo,然后运行./foo。它将失败,失败消息将包含connecting to: mongodb://./foo。将文件名更改为foo.js,它可以正常工作。
-
@kbolino解释器由Unix / Linux而不是Mongo处理,答案已经过测试。除非Mongo本身现在是一个python解释器而不是Mongo 3中的JS解释器,否则结果不应该改变。
-
@mikemaccana它与Python无关(这只是很多评论前的错字)。文件名必须以.js结尾,否则Mongo根本不会解释它,因为它将参数视为要使用的数据库的名称,而不是要执行的脚本。
-
@kbolino重复:解释器由Unix / Linux而不是Mongo处理。同样重复:尝试一下。
-
@mikemaccana一年前,我曾用3.0.5尝试过它。我刚用3.4.6再试一次。一年没有任何改变。文件名必须以.js结尾。我已经发布了确定问题的确切步骤。我恭敬地请求你尝试我所做的并亲自看看。
-
为了绝对清晰,这里有一系列shell命令来演示这个问题:pastebin.com/Tpt474te
-
mongo / shell / shell_options.cpp:400显示了参数解析逻辑以及为什么需要.js;但是,它也表明解决这个问题的另一种方法是使shebang行#!/usr/bin/env mongo --nodb - 然后你可以使用你喜欢的任何文件扩展名(或根本没有)
我发现这很容易记住:
1 2 3 4 5 6 7 8 9
| 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 } |
启动MongoDB
数据库删除命令是:
1.首先选择要删除的数据库
然后用这个..
你也可以使用"heredoc":
1 2 3
| mongo localhost/db <<EOF
db.dropDatabase()
EOF |
输出结果如下:
1 2 3 4 5 6 7
| mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{"dropped" :"db","ok" : 1 }
bye |
我喜欢使用heredocs来做这样的事情,以防你需要更复杂的命令序列。
另一种方式:
1
| echo"db.dropDatabase()" | mongo <database name> |
这里有一些使用mongo shell的mongodb的完全删除操作
要删除集合中的特定文档:db.mycollection.remove( {name:"stack"} )
要删除集合中的所有文档:db.mycollection.remove()
删除集合:db.mycollection.drop()
删除数据库:
首先通过use mydb命令转到该数据库然后
直接从命令提示符或blash:mongo mydb --eval"db.dropDatabase()
在终端执行:
1 2 3 4 5 6 7
| 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 2 3
| mongodb
use mydb
db.dropDatabase() |
该操作的输出应如下所示
1 2 3 4 5 6 7 8 9 10
| 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仍在使用中,因此此时插入任何输入将再次初始化数据库。
使用Javascript,您可以轻松创建drop_bad.js脚本来删除数据库:
创建drop_bad.js:
1 2
| use bad;
db.dropDatabase(); |
比使用mongo shell在终端中运行1命令来执行脚本:
虽然有几种方法,但最好的方法(最有效和最简单)是使用db.dropDatabase()
在命令提示符中,首先使用以下命令连接到mongodb:
1
| mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password] |
您将使用访问db。
运行以下命令以删除整个数据库:
-
-h是帮助,-d不是更像`mongo --host [host-name]的选项:[port:number] -u [username] -p [password] [dbname] --eval"db.dropDatabase( )"`
one liner remote从mongo数据库中删除所有集合
注意必须使用--host,(-h是mongo命令的帮助),而-d不是选项,请在密码后选择db和命令。
1
| mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval"db.dropDatabase()" |
登录到您的mongoDB命令行:
然后键入以下命令。
使用"YOUR_DATABASE_NAME";
db.dropDatabase();
使用mongo shell中的以下命令来删除db
use ;
db.dropDatabase();
-
该命令如何指定要删除的数据库?使用名为"auth-users"的数据库,我尝试了> use auth-users ; db.dropDatabase()和> use auth-users; db.dropDatabase(),并且都返回了[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
-
这对已发布的其他答案没有任何补充。