2013-05-01 104 views

回答

25

將這個到您的query.js文件:

function get_results (result) { 
    print(tojson(result)); 
} 

db.col.find().forEach(get_results) 

並運行:

mongo db_name query.js 

這裏有一個good explanation爲什麼你應該這樣做。

10

我發現從文件中運行的MongoDB查詢,看到控制檯輸出的最簡單的方法是這樣的:

query.js

use my_db; 
db.my_collection.findOne() 

在命令行: mongo <query.js

這會將所有輸出顯示到控制檯,就像您正在單獨運行mongo shell中的查詢一樣。

2

好信息在這裏 - 想指出,mongo提供了一個printjson()函數,因此除非需要printjson()提供的更多功能,否則不需要編寫自己的函數。

例蒙戈文件(test.js)

// Pretty print all documents in test.scratch 
use test 
db.scratch.find().forEach(printjson) 

命令

mongo < test.js 

如果你想從蒙戈文件省略use test,也許是爲了去除IDE錯誤指示的js文件,你可以在命令行中指定目標分區:

mongo test < test.js 

有趣的是:th上面的示例使用重定向將文件推送到mongo shell。這個調用約定允許你像在shell中一樣輸入命令;包括諸如use test的mongo shell便利命令。

Mongo提供了另一個腳本調用約定:mongo test test.js它省略了重定向操作符。這種調用約定要求test.js是合適的javascript,並且不能使用像use test這樣的mongo shell便利方法;一個會使用像JavaScript一樣的getSiblingDB()

+0

接受的答案將結果打印到控制檯。 – TheCrazyProgrammer 2017-04-25 20:20:45

+0

謝謝@TheCrazyProgrammer,不敢相信我錯過了。更新答案,重點關注內置的'printjson'函數和調用約定中的差異。 – 2017-04-26 15:08:00

0

其他答案沒有提到的一點是use db命令在外部腳本中不起作用。最好的辦法是使用getSiblingDB,例如,如果我想使用的數據庫名爲my_db

db = db.getSiblingDB("my_db"); 

function get_results (result) { 
    print(tojson(result)); 
} 

db.col.find().forEach(get_results) 

然後一切按你期望的那樣。見Write Scripts for the mongo Shell

+0

Nelu Malancea的答案似乎工作正常。 – TheCrazyProgrammer 2017-04-25 20:23:16

+0

將文件重定向到mongo shell允許使用mongo shell命令。 – 2017-04-26 01:57:51

1

這似乎在蒙哥CLI某個時間點發生了變化,我必須執行以下命令來讓它對數據庫運行一個文件(蒙戈CLI版本3.4.9)

mongo mongodb://192.168.1.1/YourDataBase scriptFile.js 

然後將192.168.1.1替換爲數據庫的ip/hostname,YourDataBase與數據庫名稱並指向現有文件