MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで空白なしのJSON(整形されていないJSON)を出力する方法

MongoDBで空白なしのJSONを出力するには?

MongoDBでは、find()メソッドにpretty()を組み合わせると、インデントや改行が整った読みやすい形式でドキュメントを表示できます。しかし、ログ出力やデータ連携などの場面では、逆に空白や改行を含まないコンパクトなJSON(いわゆる「unpretty JSON」)を1行で出力したいケースもあります。

そのような場合は、カーソルをwhileループで回しながらprintjsononeline()関数を使うことで、空白なしの1行JSONとして出力できます。

基本構文

var yourVariableName = db.yourCollectionName.find().sort({_id:-1}).limit(10000);

while( yourVariableName.hasNext() ) {
   printjsononeline(yourVariableName.next() );
};

サンプルコレクションの作成

実際に動きを確認するため、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行します。

> db.unprettyJsonDemo.insertOne({"StudentName":"John","StudentAge":21,"StudentTechnicalSkills":["C","C++"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c900df25705caea966c557d")
}
> db.unprettyJsonDemo.insertOne({"StudentName":"Carol","StudentAge":22,"StudentTechnicalSkills":["MongoDB","MySQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c900e085705caea966c557e")
}

これで、「John」と「Carol」という2人の学生情報を含むコレクションが準備できました。

pretty()で表示した場合との比較

まず、通常のpretty()を使って全ドキュメントを取得してみます。

> db.unprettyJsonDemo.find().pretty();

出力結果は次の通りです。

{
   "_id" : ObjectId("5c900df25705caea966c557d"),
   "StudentName" : "John",
   "StudentAge" : 21,
   "StudentTechnicalSkills" : [
      "C",
      "C++"
   ]
}
{
   "_id" : ObjectId("5c900e085705caea966c557e"),
   "StudentName" : "Carol",
   "StudentAge" : 22,
   "StudentTechnicalSkills" : [
      "MongoDB",
      "MySQL"
   ]
}

このようにpretty()を使うと、各フィールドがインデントされ、配列も改行されて表示されます。可読性は高い反面、行数が多くなるのが特徴です。

printjsononeline()で空白なしのJSONを出力する

続いて、本題である「空白のない1行JSON(unpretty JSON)」の出力方法です。以下のようにカーソルを作成し、whileループ内でprintjsononeline()を呼び出します。

> var myCursor = db.unprettyJsonDemo.find().sort({_id:-1}).limit(10000);
> while(myCursor.hasNext()){
... printjsononeline(myCursor.next());
... };

実行結果は次のようになります。

{ "_id" : ObjectId("5c900e085705caea966c557e"), "StudentName" : "Carol", "StudentAge" : 22, "StudentTechnicalSkills" : [ "MongoDB", "MySQL" ] }
{ "_id" : ObjectId("5c900df25705caea966c557d"), "StudentName" : "John", "StudentAge" : 21, "StudentTechnicalSkills" : [ "C", "C++" ] }

各ドキュメントが1行に圧縮され、空白や改行のないコンパクトなJSONとして出力されていることが確認できます。また、sort({_id:-1})を指定しているため、新しい順(_idの降順)に並んでいる点にも注目してください。

まとめ

  • 見やすい形式で表示したい場合は find().pretty() を使う
  • 空白なしの1行JSONで出力したい場合は printjsononeline() を使う
  • 大量ドキュメントを扱う際は sort()limit() と組み合わせると便利

用途に応じて両者を使い分けることで、MongoDBシェルでの作業効率が大きく向上します。

  1. Pythonで改行なしでprint出力する方法をわかりやすく解説

    Pythonのprint()関数は、デフォルトで出力の末尾に改行文字(\n)を自動的に追加します。そのため、複数のprint文を実行すると、それぞれの出力が別々の行に表示されます。しかし場合によっては、複数の出力を同じ行に連結して表示したいこともあるでしょう。この記事では、print()関数の特別な引数を使って、改行なしで1行に出力する方法を解説します。通常のprint()の動作まず、通常のprint()を使った場合の挙動を確認しましょう。以下の例では、3つのprint文がそれぞれ新しい行に出力されます。コード例print(Apple) print(Mango) print(Banana)実行

  2. PythonでJSONファイルを見やすく整形表示(プリティプリント)する方法

    Pythonは、他の多くのプログラミング言語と同様に、JavaScript Object Notation(JSON)データをスムーズに扱うことができます。さまざまなソースからJSONデータを取り込み、他のファイルと同じように操作できるため、JSONファイルを読みやすい形で整形表示(プリティプリント)したい場合に非常に便利です。 この記事では、PythonでJSONファイルをプリティプリントする2つの方法をご紹介します。どちらの方法もターミナルとコマンドラインを使用しますが、そのうち1つはPythonの知識がまったく不要です。 プリティプリントとは?(JSONファイルで使う理由) 簡単に言え