2日前にMongoを使用しており、SQLのバックグラウンドがあるので、ご容赦ください。 mysqlと同様に、MySQLコマンドラインにいて、クエリの結果をマシン上のファイルに出力すると非常に便利です。私はMongoで同じことをする方法を理解しようとしていますシェルにいる間
シェルの外部にいて次のコマンドを実行することで、必要なクエリの出力を簡単に取得できます。
mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" >> sample.json
上記の方法で問題ありませんが、このコマンドを実行するには、mongoシェルを終了するか、新しいターミナルタブを開く必要があります。シェル内にいる間にこれを行うことができれば、非常に便利です。
追伸:質問は、私が投稿した質問の派生物です [〜#〜] so [〜#〜]
私の知る限り、ファイルへの出力用のインタラクティブなオプションはありません。以前の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" }
スクリプトファイル、dbアドレス、および--quiet引数を使用してシェルを呼び出す場合、出力(たとえばprint()で作成)をファイルにリダイレクトできます。
mongo localhost/mydatabase --quiet myScriptFile.js > output
このようにできます-
mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000)' > users.json
shellBatchSize
引数は、mongoクライアントが印刷できる行数を決定するために使用されます。デフォルト値は20です。
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() );
端末からクエリを送信
-z
sed
のキーにより、出力を単一の複数行の文字列として扱うことができます
$> mongo localhost --quiet myScriptFile.js | sed -z 's/^.*CUT_TO_HERE\n//' > output.json
表示される結果の数を単純に増やすと便利な場合があります
Mongoシェルで>
DBQuery.shellBatchSize = 3000
その後、ターミナルからすべての結果を一度に選択して、テキストファイルに貼り付けることができます。
それは私がやろうとしていることです:)