如何从命令行删除 MongoDB 数据库?
Posted
技术标签:
【中文标题】如何从命令行删除 MongoDB 数据库?【英文标题】:How do I drop a MongoDB database from the command line? 【发布时间】:2012-02-10 01:15:15 【问题描述】:从我的 bash 提示符中执行此操作的最简单方法是什么?
【问题讨论】:
看到这个问题:***.com/questions/3366397/…。在 mongo shell 中很容易做到。 【参考方案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 <dbname> --eval "printjson(db.dropDatabase())"
K. P.麦格雷戈。你应该是:“use mean-dev”+“db.dropDatabase()”
谢谢。这是您可以自定义主机和端口的方式:mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
【参考方案2】:
最好的方法是从 mongodb 控制台:
> use mydb;
> db.dropDatabase();
或者,您可以停止mongod
并从您的数据目录中删除数据文件,然后重新启动。
提示:您还可以将数据文件移动到子文件夹中,如果您确定不再需要它们,则将其删除。
【讨论】:
我认为他的意思是直接从提示开始,不是吗?在这种情况下,您要么必须使用这些命令生成一个 .js 文件,然后使用“mongo dropdb.js”或其他方式从提示中调用它,要么按照您所说的操作并手动删除文件。 但请注意,您不能在 .js 文件中使用use
命令,您必须连接到具体的数据库(为 mongo 命令指定 dbname)
专业提示:删除数据库后,您可能希望退出 mongo shell 并删除 ~/.dbshell
文件以清除命令历史记录。 (可能有更好的方法 - 我不确定。)我这样做是因为,与 SQL 不同,用于删除数据库的 mongo 命令实际上并不引用要删除的数据库的名称 i> - 它只是删除客户端当前连接的数据库。清除命令历史记录将防止您意外重播 dropDatabase
命令并无意中删除第二个数据库。
这是一个聪明的主意,@chrisallenlane。 mongodb shell 有时是一个相当危险的工具...... :)
警告: 如果删除数据库并创建具有相同名称的新数据库,则必须重新启动所有 mongos 实例,或者在之前对所有 mongos 实例使用 flushRouterConfig 命令读取或写入该数据库。此操作可确保 mongos 实例刷新其元数据缓存,包括新数据库的主分片的位置。否则,mongos 可能会丢失读取数据并将数据写入错误的分片。【参考方案3】:
我发现这很容易记住:
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
【讨论】:
【参考方案4】:您不需要 heredocs 或 eval,mongo
本身可以充当解释器。
#!/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 文件名,对吗?"不。检查ps
的输出。
@mikemaccana ps
的输出仅显示您调用 ps
时正在运行的内容,而不是导致该点的 exec
调用链或内核已完成的工作加载和执行文件。如果你想知道到底发生了什么,你应该使用在/usr/bin/env
周围写一个包装器,将其设置为shebang 行中的可执行文件,然后使用strace
启动整个过程。【参考方案5】:
启动 MongoDB
数据库删除命令是:
1.首先选择要删除的数据库
use < database name >
2.然后用这个..
db.dropDatabase()
【讨论】:
【参考方案6】:你也可以使用“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 用于此类事情,以防您需要更复杂的命令序列。
【讨论】:
【参考方案7】:这里有一些使用 mongo shell 对 mongodb 使用完全删除操作
要删除集合中的特定文档:db.mycollection.remove( name:"stack" )
要删除集合中的所有文档:db.mycollection.remove()
删除收藏:db.mycollection.drop()
删除数据库:
首先通过use mydb
命令访问该数据库,然后
db.dropDatabase()
直接从命令提示符或闪现:mongo mydb --eval "db.dropDatabase()
【讨论】:
【参考方案8】:其他方式:
echo "db.dropDatabase()" | mongo <database name>
【讨论】:
【参考方案9】:在终端中执行:
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.
【讨论】:
与一个月前给出的this one 相同的答案。【参考方案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
仍在使用中,因此此时插入任何输入都会再次初始化数据库。
【讨论】:
【参考方案11】:使用 javascript,您可以轻松创建 drop_bad.js 脚本来删除数据库:
创建 drop_bad.js:
use bad;
db.dropDatabase();
比在终端中运行 1 个命令来使用 mongo shell 执行脚本:
mongo < drop_bad.js
【讨论】:
【参考方案12】:打开终端并输入:
mongo
下面的命令应该显示列出的数据库:
show dbs
/* the <dbname> is the database you'd like to drop */
use <dbname>
/* the below command will delete the database */
db.dropDatabase()
以下应该是终端中的输出:
"dropped": "<dbname>",
"ok": 1
【讨论】:
【参考方案13】:尽管有多种方法,但最好的方法(最有效和最简单)是使用db.dropDatabase()
【讨论】:
【参考方案14】:在您的命令提示符下,首先使用以下命令连接到 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()" `【参考方案15】:一个班轮远程从 mongo 数据库中删除所有集合
注意必须使用--host,(-h是mongo命令的帮助),-d不是选项,密码后选择db和command。
mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"
【讨论】:
【参考方案16】:很惊讶我们还没有看到这种变化。这最大限度地减少了命令行上的额外参数,并明确显示数据库被切换到FOO
,然后被删除:
$ mongo --host "mongodb://machine:port" --eval 'db.getSiblingDB("FOO").dropDatabase();'
【讨论】:
【参考方案17】:登录到您的 mongoDB 命令行: 并键入以下命令。 使用“YOUR_DATABASE_NAME”; db.dropDatabase();
【讨论】:
【参考方案18】:使用 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")
【讨论】:
【参考方案19】:db 将显示当前数据库名称 类型:db.dropDatabase();
1- 使用 'use' 关键字选择要删除的数据库。
2- 然后输入 db.dropDatabase();
【讨论】:
【参考方案20】:使用以下命令从 mongo shell 删除 db
use <database name>;
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 :
以上是关于如何从命令行删除 MongoDB 数据库?的主要内容,如果未能解决你的问题,请参考以下文章