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


Answers:


1084

像这样:

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:均值未定义”。但是在此答案中使用解决方案就可以了。+1
KP MacGregor 2014年

22
如果您想获得人类可读的结果,请按照以下方式进行操作: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko 2014年

1
KP MacGregor。您应该已经:“ use mean-dev” +“ db.dropDatabase()”
ozma

谢谢。您可以通过以下方法自定义主机和端口: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens

844

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

> use mydb; 
> db.dropDatabase();

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

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


2
我认为他是直接从提示中表示,不是吗?在这种情况下,您要么必须使用这些命令生成一个.js文件,然后使用“ mongo dropdb.js”之类的提示从提示符中调用它,要么按照您所说的做,并手动删除这些文件。
Remon van Vliet 2012年

2
但请注意,您无法use在.js文件中使用命令,必须连接到具体的数据库(为mongo命令指定dbname)
Betlista 2012年

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

3
这是一个聪明的主意,@ chrisallenlane。mongodb shell有时有时是相当危险的工具... :)
mnemosyn 2013年

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

114

我发现这很容易记住:

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 }

113

您不需要heredocs或evalmongo它本身可以充当解释器。

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

使文件可执行并运行。


3
请注意,脚本名称必须以结尾.js,否则将被解释为数据库地址。
Vegard

1
@Vegard这是不正确的。您正在运行mongo filename,这是不必要的-文件已在第一行中包含解释器。只需使文件可执行并运行即可./filename
mikemaccana

@mikemaccana我知道,但是./filename实际上可以运行/usr/bin/env mongo filename,对吗?因此,如果filename不以结尾.py,mongo不会将参数识别为要运行的脚本。
Vegard

“执行./filename实际上会运行/ usr / bin / env mongo filename,对吗?” 否。检查的输出ps
mikemaccana

@mikemaccana的输出ps仅显示您在调用时正在运行的内容ps,而不exec显示导致该问题的调用链,也不显示内核为加载和执行文件所做的工作。如果您想知道真正发生了什么,则应使用编写包装器/usr/bin/env,将其设置为shebang行中的可执行文件,然后使用来启动整个过程strace
kbolino

31

启动MongoDB

用于数据库删除的命令是:

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

use < database name >

2.然后使用它。

db.dropDatabase()

28

您还可以使用“ 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这样的事情。



18

这是一些使用mongo shell对mongodb使用完全删除操作的方法

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

删除所有文件的集合: db.mycollection.remove()

删除集合db.mycollection.drop()

删除数据库:先去该数据库由use mydb命令,然后

db.dropDatabase()

直接从命令提示符或blash: mongo mydb --eval "db.dropDatabase()



10

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

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它仍在使用中,因此在那时插入任何输入将再次初始化数据库。


4

使用Javascript,您可以轻松创建drop_bad.js脚本来删除数据库:

创建drop_bad.js

use bad;
db.dropDatabase();

比在终端中运行1命令使用mongo shell提取脚本:

mongo < drop_bad.js

2

即使有几种方法,最好的方法(最有效,最简单)是使用 db.dropDatabase()


2

在命令提示符中,首先使用以下命令连接到mongodb:

mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password]

您将使用访问数据库<dbname>

运行以下命令删除整个数据库:

db.dropDatabase()

-h是帮助,-d不是选项,更像是`mongo --host [host-name]:[port:number] -u [username] -p [password] [dbname] --eval“ db.dropDatabase( )“`
jasenmichael

2

一个班轮远程从mongo数据库中删除所有集合

注意必须使用--host,(-h是mongo命令的帮助),并且-d不是选项,请在密码后选择db和command。

mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"

0

登录到mongoDB命令行:并输入以下命令。 使用“ YOUR_DATABASE_NAME”; db.dropDatabase();


0

使用python删除MongoDB数据库:

import argparse

import pymongo


if __name__ == "__main__":
    """
    Drop a Database.
    """

    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default='mongodb://localhost:27017',
                        help="mongodb URI [default: %(default)s]")
    parser.add_argument("--database", default=None,
                        help="database name: %(default)s]")

    args = parser.parse_args()

    client = pymongo.MongoClient(host=args.host)

    if args.database in client.list_database_names():
        client.drop_database(args.database)
        print(f"Dropped: '{args.database}'")
    else:
        print(f"Database '{args.database}' does not exist")

-1

db将显示当前的数据库名称类型:db.dropDatabase();

1-使用“ use ”关键字选择要删除的数据库。

2-然后键入db.dropDatabase();


-2

从mongo shell使用以下命令删除数据库

采用 ; 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 :
Kennedy先生,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.