web-dev-qa-db-ja.com

MongoシェルでのMongoクエリ出力のファイルへの印刷

2日前にMongoを使用しており、SQLのバックグラウンドがあるので、ご容赦ください。 mysqlと同様に、MySQLコマンドラインにいて、クエリの結果をマシン上のファイルに出力すると非常に便利です。私はMongoで同じことをする方法を理解しようとしていますシェルにいる間

シェルの外部にいて次のコマンドを実行することで、必要なクエリの出力を簡単に取得できます。

mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" >> sample.json

上記の方法で問題ありませんが、このコマンドを実行するには、mongoシェルを終了するか、新しいターミナルタブを開く必要があります。シェル内にいる間にこれを行うことができれば、非常に便利です。

追伸:質問は、私が投稿した質問の派生物です [〜#〜] so [〜#〜]

43
Parijat Kalia

私の知る限り、ファイルへの出力用のインタラクティブなオプションはありません。以前のSOこれに関連する質問: mongodb Shell出力をファイルに出力

ただし、teeコマンドでシェルを呼び出した場合、すべてのシェルセッションをログに記録できます。

$ mongo | tee file.txt
MongoDB Shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

次に、このコンテンツを含むファイルを取得します。

MongoDB Shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

すべてのコマンドを削除してjson出力のみを保持するには、次のようなコマンドを使用できます。

tail -n +3 file.txt | egrep -v "^>|^bye" > output.json

次に、取得します:

{ "this" : "is a test" }
{ "this" : "is another test" }
52
Roberto

スクリプトファイル、dbアドレス、および--quiet引数を使用してシェルを呼び出す場合、出力(たとえばprint()で作成)をファイルにリダイレクトできます。

mongo localhost/mydatabase --quiet myScriptFile.js > output 
18
Rondo

このようにできます-

mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000)' > users.json

shellBatchSize引数は、mongoクライアントが印刷できる行数を決定するために使用されます。デフォルト値は20です。

17
Jyotman Singh

いくつかの条件を組み合わせます:

  • jSファイルにmongoクエリを記述し、ターミナルから送信します
  • プログラムでデータベースを切り替え/定義する
  • 見つかったすべてのレコードを出力します
  • 初期出力行を切り取ります
  • 出力をJSONファイルに保存します

myScriptFile.js

// Switch current database to "mydatabase"
db = db.getSiblingDB('mydatabase');

// The mark for cutting initial output off
print("CUT_TO_HERE");

// Main output
// "toArray()" method allows to get all records
printjson( db.getCollection('jobs').find().toArray() );

端末からクエリを送信

-zsedのキーにより、出力を単一の複数行の文字列として扱うことができます

$> mongo localhost --quiet myScriptFile.js | sed -z 's/^.*CUT_TO_HERE\n//' > output.json

3
SergO

表示される結果の数を単純に増やすと便利な場合があります

Mongoシェルで> DBQuery.shellBatchSize = 3000

その後、ターミナルからすべての結果を一度に選択して、テキストファイルに貼り付けることができます。

それは私がやろうとしていることです:)

(from: https://stackoverflow.com/a/3705615/1290746

3
kris