(PECL mongo >=0.9.0)
MongoCollection::batchInsert — 複数のドキュメントをコレクションに追加する
配列の配列。
追加時のオプション。
"safe"
boolean あるいは整数値で、デフォルトは FALSE です。FALSE の場合、データベースからの応答を待たずにプログラムを続行します。 TRUE の場合、プログラムはデータベースからの応答を待ち、 追加に失敗したときには MongoCursorException をスローします。
safe が整数値の場合は、 指定した数のマシンで追加が成功するまでは成功したと見なしません (処理がタイムアウトした場合は例外をスローします。wtimeout を参照ください)。 これは、コレクションに設定された w 変数をオーバーライドします。
"fsync"
boolean で、デフォルトは FALSE です。 追加操作がディスク上に同期されるまで成功とは見なさないようにさせます。 TRUE の場合は "安全な" 追加操作が前提となり、 safe の設定を FALSE にオーバーライドします。
"safe" が設定されているときは、追加の状況 ("ok") と発生したエラー ("err") を連想配列で返します。設定されていないときは、一括追加の送信に成功すれば TRUE、失敗すれば FALSE を返します。
"safe" オプションが設定されていて追加に失敗した場合に MongoCursorException をスローします。
"safe" オプションが 1 より大きい整数値に設定されているとき、 MongoCollection::$wtimeout ミリ秒以内に処理が終わらなかった場合に MongoCursorTimeoutException をスローします。
バージョン | 説明 |
---|---|
1.0.5 | "options" パラメータが追加されました。 |
1.0.9 | "safe" オプションに整数値がわたせるようになり (以前は booleans のみでした)、さらに "fsync" オプションが追加されました。 |
例1 MongoCollection::batchInsert() の例
バッチ挿入を使用すると、多くの要素を一度にデータベースに追加できます。
<?php
$users = array();
for ($i = 0; $i<100; $i++) {
$users[] = array('username' => 'user'.$i, 'i' => $i);
}
$mongo = new Mongo();
$collection = $mongo->my_db->users;
$collection->drop();
$collection->batchInsert($users);
foreach ($users as $user) {
echo $user['_id']."\n"; // MongoId のインスタンスが格納されています
}
$users = $collection->find()->sort(array('i' => 1));
foreach ($users as $user) {
var_dump($user['username']);
}
?>
上の例の出力は、 たとえば以下のようになります。
4bf43ac68ead0e1971000000 4bf43ac68ead0e1971010000 4bf43ac68ead0e1971020000 ... string(5) "user1" string(5) "user2" string(5) "user3" ...