2011-12-19 27 views
24

32-bit Mongo 2.0.1 trên một máy Windows XPMongo vỏ kịch bản sẽ không cho phép tôi bao gồm "sử dụng <database>"

//script filename: test.js (one line shell script file to store a person) 
db.cTest.save({Name: "Fred", Age:21}); 

chạy chống lại cơ sở dữ liệu dbTest bằng cách nhập 2 lệnh shell sau:

> use dbTest 
    switched to dbTest 
    > load("test.js") 

Cho đến nay, rất tốt.

Nhưng nếu tôi cố gắng và bao gồm các "sử dụng" tuyên bố trong kịch bản nó không thành công:

//script filename: test.js (including "use" statement) 
use dbTest; 
db.cTest.save({Name: "Fred", Age:21}); 

không thành công với msg lỗi như sau:

> load("test.js") 
    SyntaxError: missing ; before statement 
    Mon Dec 19 11:56:31: Error: error loading js file temp.js (shell):1 

Thêm hoặc loại bỏ các dấu chấm phẩy để test.js dường như không quan trọng.

Vậy làm cách nào để bạn đưa chỉ thị "sử dụng" vào tập lệnh shell mongo?

Trả lời

12

http://www.mongodb.org/display/DOCS/Scripting+the+shell

sử dụng dbname
Lệnh này không hoạt động trong chế độ kịch bản. Thay vào đó, bạn sẽ cần xác định rõ ràng cơ sở dữ liệu trong kết nối (/ dbname trong ví dụ trên).

Cách khác, bạn cũng có thể tạo một kết nối trong kịch bản:

db2 = connect ("server: 27.017/otherdbname")

+1

Câu trả lời dưới đây là điều đúng. Để biết tổng quan về sự khác biệt giữa JS tương tác và theo kịch bản: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#differences-between-interactive-and-scripted-mongo – Rmatt

13

Vâng, nó vẫn là điều không may rằng "tải ('tập tin .js ') "và" mongo file.js "không thực sự sử dụng trình thông dịch kịch bản giống như shell mongo tương tác. Việc mở kết nối một cách rõ ràng trong kịch bản có khả năng là vi phạm nguyên tắc DRY vì mongo đã biết thông tin đó. Có gì không làm việc, tuy nhiên, là đường ống các tập tin vào Mông Cổ chứ không phải đi qua tên của nó trên dòng lệnh:

mongo <file.js 
+0

hoạt động như mong đợi, cảm ơn –

38

Trong một kịch bản Mongo bạn có thể sử dụng db.getSiblingDB('new_db_name') để có được một tài liệu tham khảo của một cơ sở dữ liệu mới. Vì vậy, nó không bắt buộc phải cung cấp tên cơ sở dữ liệu trong dòng lệnh. Bạn có thể sử dụng script.js:

db = db.getSiblingDB('new_db_name'); 
print(db); 

// the rest of your code for database "new_db_name" 

và đầu ra của kịch bản này là (gọi với mongo script.js):

MongoDB shell version: 2.2.2 
connecting to: test 
sag 
+0

Cảm ơn! Siêu hữu ích – devshorts

+0

Điều này là hoàn hảo cho khi bạn muốn viết một tập lệnh hoặc hàm nhanh từ bên trong vỏ mongo. Dòng khóa để chuyển đổi cơ sở dữ liệu là db = db.getSiblingDB ('new_db_name'); –

Các vấn đề liên quan