PHPで書き出したJSONファイルをMongoDBにimportする

PHPの配列をJSONにデコードしファイルに保存。

そのファイルをMongodbにimportしてみました

PHPの配列をJSONに変換す

<?php
	$hoge = [
		morning => 'おはよう',
		daytime => 'こんにちは',
		night => 'こんばんは'
	];
	$geho = json_encode($hoge);
?>

$hogeという連想配列をjson_encodeで$gehoに入れています

ファイルに書き出す

<?php
	file_put_contents('geho.json', geho);
?>

第1引数はファイル名。第2引数が書き出す内容です。

ファイルをMongoDBにimportする

mongoimport --db dbName --collection collectionName --jsonArray --drop --file ./geho.json

mongoimportコマンドでimportしていきます。

--dbの後ろが使うDBの名前です。
--collectionの後ろはコレクション名。
--fileの後ろはファイル名です。
--dropはimport先のコレクションを初期化する設定です。
--jsonArrayこれが重要で、これが無いとエラーになります
--jsonArrayを設定していない場合。エラーコードが出ます。
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
imported 0 documents

なんぞ?といった感じですが、とりあえずimport出来てないんだなってことはわかります。

実はmongoimportは記載形式がJSON風?なだけでカンマ駄目とか1行で1個のオブジェクトとする。などルールがあるようです。
ツッコミたくなるようですが、調べて貰えば色々出てきます。
jsonArrayのオプションを付けるとimport出来るので問題ないですが、読み込めるファイル容量は16MBまでと制限がかけられるみたいです…

mongoimportの仕様にそった形式に形成するかファイルを分割するのか悩ましいところではあります。
そもそもそこまで大きなファイルをjsonファイルにしてimportするのか…というのもありますけどね。


良ければドキュメントを参照してみてください
https://docs.mongodb.com/manual/reference/program/mongoimport

あわせて読みたい