1. ホーム
  2. mongodb

[解決済み] mongo シェルで Mongo クエリの出力をファイルに出力する

2023-05-06 22:08:29

質問

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

シェルの外にいて、以下のコマンドを実行することで、簡単に欲しいクエリの出力を得ることができます。

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

上記の方法でもいいのですが、このコマンドを実行するためにmongoのシェルを終了するか、新しいターミナルタブを開く必要があります。シェルの中にいながらこれを簡単に実行できればとても便利です。

P.S.: この質問は、私が SO

どのように解決するのですか?

AFAIKは、ファイルへの出力のためのインタラクティブなオプションはありません、これに関連する以前のSO質問があります。 mongodbシェル出力のファイルへの印刷

ただし、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" }