Làm cách nào để tôi thả cơ sở dữ liệu MongoDB khỏi dòng lệnh?


Câu trả lời:


1084

Như thế này:

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

Thông tin thêm về kịch bản shell từ dòng lệnh tại đây: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting


Điều này rất hữu ích trong trường hợp của tôi. Bằng cách nào đó tôi đã có một cơ sở dữ liệu có tên "mean-dev" từ bản cài đặt cũ hơn và nhập "mean-dev.dropDatabase ()" vào trình vỏ mongo dẫn đến "ReferenceError: mean không được xác định". Nhưng sử dụng giải pháp trong câu trả lời này đã làm được mẹo. +1
KP MacGregor

22
Nếu bạn muốn có được kết quả có thể đọc được của con người, hãy làm theo cách này: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko

1
KP MacGregor. bạn nên có: "sử dụng mean-dev" + "db.dropDatabase ()"
ozma

Cảm ơn. Đây là cách bạn có thể tùy chỉnh máy chủ và cổng: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens

844

Cách tốt nhất để làm điều đó là từ bảng điều khiển mongodb:

> use mydb; 
> db.dropDatabase();

Ngoài ra, bạn có thể dừng mongodvà xóa các tệp dữ liệu khỏi thư mục dữ liệu của mình, sau đó khởi động lại.

Gợi ý: bạn cũng có thể di chuyển các tệp dữ liệu sang thư mục con và xóa chúng nếu bạn chắc chắn rằng bạn không còn cần chúng nữa.


2
Tôi nghĩ rằng anh ấy có nghĩa là trực tiếp từ dấu nhắc không anh? Trong trường hợp đó, bạn phải tạo tệp .js bằng các lệnh đó và gọi nó từ dấu nhắc bằng cách sử dụng "mongo dropdb.js" hoặc một cái gì đó hoặc làm như bạn nói và xóa các tệp theo cách thủ công.
Remon van Vliet

2
nhưng lưu ý rằng bạn không thể sử dụng uselệnh trong tệp .js, bạn phải kết nối với DB cụ thể (chỉ định dbname cho lệnh mongo)
Betlista

46
Mẹo chuyên nghiệp: sau khi bỏ cơ sở dữ liệu, bạn có thể muốn thoát khỏi vỏ mongo và xóa ~/.dbshelltệp của mình để xóa lịch sử lệnh. (Có thể có một cách tốt hơn để làm điều đó - Tôi không chắc chắn.) Tôi làm điều này bởi vì, không giống như SQL, lệnh mongo để hủy cơ sở dữ liệu không thực sự tham chiếu tên của cơ sở dữ liệu - nó chỉ bỏ cơ sở dữ liệu mà khách hàng hiện đang kết nối. Xóa lịch sử lệnh của bạn sẽ ngăn bạn vô tình phát lại dropDatabaselệnh và vô tình làm rơi cơ sở dữ liệu thứ hai.
Chris Allen Lane

3
Đó là một ý tưởng thông minh, @chrisallenlane. Vỏ mongodb là một công cụ nguy hiểm đôi khi ... :)
mnemosyn

Cảnh báo: Nếu bạn bỏ cơ sở dữ liệu và tạo cơ sở dữ liệu mới có cùng tên, bạn phải khởi động lại tất cả các trường hợp mongos hoặc sử dụng lệnh flushRouterConfig trên tất cả các trường hợp mongos trước khi đọc hoặc ghi vào cơ sở dữ liệu đó. Hành động này đảm bảo rằng các phiên bản mongos làm mới bộ đệm siêu dữ liệu của chúng, bao gồm cả vị trí của phân đoạn chính cho cơ sở dữ liệu mới. Mặt khác, các mongos có thể bỏ lỡ dữ liệu khi đọc và có thể ghi dữ liệu vào một phân đoạn sai.
Lekr0

115

Tôi thấy điều này dễ nhớ:

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

Bạn không cần heredocs hoặc eval , mongobản thân nó có thể hoạt động như một thông dịch viên.

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

Làm cho tập tin thực thi và chạy nó.


3
Lưu ý rằng tên tập lệnh phải kết thúc bằng .js, nếu không nó sẽ được hiểu là địa chỉ db.
Vegard

1
@Vegard Điều đó không đúng. Bạn đang chạy mongo filenamekhông cần thiết - tệp đã có trình thông dịch ở dòng trên cùng. Chỉ cần làm cho tập tin thực thi và chạy nó./filename
mikemaccana

@mikemaccana Tôi biết điều đó, nhưng ./filenamethực sự sẽ chạy /usr/bin/env mongo filename, phải không? Và vì vậy, nếu filenamekhông kết thúc .py, mongo sẽ không nhận ra đối số là tập lệnh để chạy.
Vegard

"Làm ./filename sẽ thực sự chạy tên tập tin / usr / bin / env mongo, phải không?" Không. Kiểm tra đầu ra của ps.
mikemaccana

@mikemaccana Đầu ra của pschỉ hiển thị cho bạn những gì đang chạy tại thời điểm bạn gọi ps, không phải chuỗi các execcuộc gọi dẫn đến điểm đó cũng như công việc mà kernel đã thực hiện để tải và thực thi tệp. Nếu bạn muốn biết những gì đang thực sự xảy ra, bạn nên sử dụng viết một trình bao bọc xung quanh /usr/bin/env, đặt nó là tệp thực thi trong dòng shebang, và sau đó khởi động toàn bộ strace.
kbolino

31

Bắt đầu MongoDB

Lệnh thả cơ sở dữ liệu là:

1. đầu tiên chọn cơ sở dữ liệu mà bạn muốn xóa

use < database name >

2. Sau đó sử dụng ..

db.dropDatabase()

28

Bạn cũng có thể sử dụng một "di truyền":

mongo localhost/db <<EOF
db.dropDatabase()
EOF

Kết quả trong đầu ra như:

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

Tôi thích sử dụng heredocs cho những thứ như thế này, trong trường hợp bạn muốn chuỗi lệnh phức tạp hơn.


19

Dưới đây là một số thao tác xóa hoàn toàn cho mongodb bằng cách sử dụng shell mongo

Để xóa tài liệu cụ thể trong bộ sưu tập:db.mycollection.remove( {name:"stack"} )

Để xóa tất cả các tài liệu trong bộ sưu tập: db.mycollection.remove()

Để xóa bộ sưu tập : db.mycollection.drop()

để xóa cơ sở dữ liệu : đầu tiên hãy vào cơ sở dữ liệu đó bằng use mydblệnh và sau đó

db.dropDatabase()

trực tiếp từ dấu nhắc lệnh hoặc blash: mongo mydb --eval "db.dropDatabase()



15

Thực thi trong một thiết bị đầu cuối:

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
Câu trả lời tương tự như câu hỏi này , đã được đưa ra một tháng trước đó.
Dan Dascalescu

10

Mở một cửa sổ đầu cuối khác và thực hiện các lệnh sau,

mongodb
use mydb
db.dropDatabase()

Đầu ra của hoạt động đó sẽ trông như sau

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 }
>

Xin lưu ý rằng mydbvẫn đang được sử dụng, do đó việc chèn bất kỳ đầu vào nào tại thời điểm đó sẽ khởi tạo lại cơ sở dữ liệu.


4

Sử dụng Javascript, bạn có thể dễ dàng tạo tập lệnh drop_bad.js để hủy cơ sở dữ liệu của mình:

tạo drop_bad.js :

use bad;
db.dropDatabase();

Hơn chạy 1 lệnh trong terminal để thực thi đoạn script bằng cách sử dụng shell mongo:

mongo < drop_bad.js

2

Mặc dù có một số phương pháp, Cách tốt nhất (hiệu quả nhất và dễ nhất) là sử dụng db.dropDatabase()


2

Trong dấu nhắc lệnh của bạn, Đầu tiên kết nối với mongodb bằng lệnh sau:

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

bạn sẽ truy cập db với <dbname>.

Chạy lệnh sau để thả toàn bộ cơ sở dữ liệu:

db.dropDatabase()

-h là trợ giúp, -d không phải là một tùy chọn giống như `mongo --host [tên máy chủ]: [port: number] -u [tên người dùng] -p [mật khẩu] [dbname] --eval" db.dropDatabase ( ) "`
jasenmichael

2

một lớp lót từ xa loại bỏ tất cả các bộ sưu tập từ cơ sở dữ liệu mongo

lưu ý phải sử dụng --host, (-h là trợ giúp cho lệnh mongo) và -d không phải là một tùy chọn, chọn db và lệnh sau mật khẩu.

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

0

Đăng nhập vào dòng lệnh mongoDB của bạn: Và nhập các lệnh dưới đây. sử dụng "YOU_DATABASE_NAME"; db.dropDatabase ();


0

Thả cơ sở dữ liệu MongoDB bằng python:

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 sẽ hiển thị loại tên cơ sở dữ liệu hiện tại: db.dropDatabase ();

1- chọn cơ sở dữ liệu để thả bằng cách sử dụng ' use từ khóa ' '.

2- sau đó nhập db.dropDatabase ();


-2

sử dụng lệnh sau từ vỏ mongo để thả db

sử dụng ; db.dropDatabase ();


Làm thế nào để lệnh này chỉ định cơ sở dữ liệu để thả? Với một cơ sở dữ liệu được gọi là "auth-users" Tôi đã cố gắng > use auth-users ; db.dropDatabase()> use auth-users; db.dropDatabase()và cả hai trở lại[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Ông Kennedy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.