具体的には、mongodb find()
の結果をファイルに出力します。 JSONオブジェクトが大きすぎるため、シェルウィンドウサイズでオブジェクト全体を表示できません。
シェルは、インタラクティブな環境であるため、いくつかの素晴らしい機能を提供します。
Mongo commands.jsを介してjavascriptファイルからコマンドを実行すると、まったく同じ動作をすることはありません。
これには2つの方法があります。
(1)シェルを偽造して、対話モードにあると思わせる
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
または
(2)Javascriptを使用してfind()
の結果を印刷可能なJSONに変換します
mongo dbname command.js > output.json
command.jsには、これ(または同等のもの)が含まれています。
printjson( db.collection.find().toArray() )
これは[ ]
を含む結果の配列をきれいに出力します-配列と各要素をprintjson()
繰り返したくない場合。
ところで、1つのJavascriptステートメントだけを実行している場合は、ファイルに置く必要はなく、代わりに次を使用できます。
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
ターミナルでこれを行っており、レコードを正常な方法で検査したいだけなので、次のようなトリックを使用できます。
mongo | tee somefile
通常どおりセッションを使用します-db.collection.find().pretty()
または必要な操作をすべて実行し、長い出力を無視して終了します。セッションのトランスクリプトは、tee
に書き込まれたファイルにあります。
Mongoシェルが対話型セッションを予期しているため、出力にエスケープシーケンスやその他のゴミが含まれている可能性があることに注意してください。 less
はこれらを適切に処理します。
実行するコマンドをファイルに入れてから、データベース名とともにシェルに渡し、出力をファイルにリダイレクトします。したがって、findコマンドがfind.js
にあり、データベースがfoo
にある場合、次のようになります。
./mongo foo find.js >> out.json
クエリ(たとえばdb.someCollection.find().pretty()
)をjavascriptファイルに入れて、たとえばquery.js
としましょう。次に、コマンドを使用して、オペレーティングシステムのシェルで実行します。
mongo yourDb < query.js > outputFile
クエリ結果は「outputFile」という名前のファイルにあります。
デフォルトでは、MongoはIIRCの最初の20ドキュメントを印刷します。さらに必要な場合は、Mongo Shellでバッチサイズに新しい値を定義できます。
DBQuery.shellBatchSize = 100
。
print
およびJSON.stringify
を使用すると、単純に有効JSON
結果を生成できます。--quiet
フラグを使用して、出力からシェルノイズをフィルタリングします。--norc
評価を回避するには、.mongorc.js
フラグを使用します。 (使用するプリティフォーマッターのために、無効なJSON出力が生成されるため、これを実行する必要がありました)DBQuery.shellBatchSize = ?
を使用して?
ページングを回避するための実際の結果の制限。
最後に、tee
を使用して、端末出力をファイルにパイプします。
// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json
// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
print(JSON.stringify(data, null, 2));
}
toPrint(
db.getCollection('myCollection').find().toArray()
);
お役に立てれば!
これを使用して answer Asya Kamskyから、Windows用の1行のバットスクリプトを作成しました。行は次のようになります。
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
次に、それを実行できます:
exportToJson.bat DbName CollectionName
また、そのための mongoexport がありますが、どのバージョンが利用可能かはわかりません。
例:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json
Neodan mongoexportによる answer は、クエリの-q
オプションで非常に便利です。また、ObjectId
をJSONの標準形式"$oid"
に変換します。例えば:
mongoexport -d yourdb -c yourcol --jsonArray --pretty -q '{"field": "filter value"}' -o output.json
writeFile()関数で結果を保存できました。
> writeFile("/home/pahan/output.txt", tojson(db.myCollection.find().toArray()))
Mongo Shellバージョンは4.0.9でした