Cách dễ nhất để làm điều này từ dấu nhắc bash của tôi là gì?
Cách dễ nhất để làm điều này từ dấu nhắc bash của tôi là gì?
Câu trả lời:
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
mongo <dbname> --eval "printjson(db.dropDatabase())"
mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
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 mongod
và 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.
use
lệ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)
~/.dbshell
tệ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 dropDatabase
lệnh và vô tình làm rơi cơ sở dữ liệu thứ hai.
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 }
Bạn không cần heredocs hoặc eval , mongo
bả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ó.
.js
, nếu không nó sẽ được hiểu là địa chỉ db.
mongo filename
khô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
./filename
thực sự sẽ chạy /usr/bin/env mongo filename
, phải không? Và vì vậy, nếu filename
không kết thúc .py
, mongo sẽ không nhận ra đối số là tập lệnh để chạy.
ps
.
ps
chỉ 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 exec
cuộ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
.
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.
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 mydb
lệnh và sau đó
db.dropDatabase()
trực tiếp từ dấu nhắc lệnh hoặc blash: mongo mydb --eval "db.dropDatabase()
Cách khác:
echo "db.dropDatabase()" | mongo <database name>
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.
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 mydb
vẫ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.
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()
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()"
Đă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 ();
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")
sử dụng lệnh sau từ vỏ mongo để thả db
sử dụng ; db.dropDatabase ();
> use auth-users ; db.dropDatabase()
và > use auth-users; db.dropDatabase()
và cả hai trở lại[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :