Model.create()とModel.collection.insert():より高速なアプローチ
Model.create()
非常に大きなバルクを扱っている場合は、挿入を行うのに悪い方法です。 非常に遅い 。その場合は、Model.collection.insert
を使用する必要があります 、はるかに優れた 。バルクのサイズに応じて、Model.create()
クラッシュすることさえあります!百万の文書で試してみましたが、運がありませんでした。 Model.collection.insert
を使用する ほんの数秒でした。
Model.collection.insert(docs, options, callback)
-
docs
挿入されるドキュメントの配列です。 options
オプションの構成オブジェクトです-ドキュメントを参照してください-
callback(err, docs)
すべてのドキュメントが保存されるか、エラーが発生した後に呼び出されます。成功すると、ドキュメントは永続化されたドキュメントの配列になります。
Mongooseの作成者がここで指摘しているように、このメソッドは検証手順をバイパスし、Mongoドライバーに直接アクセスします。大量のデータを処理するため、トレードオフを行う必要があります。そうしないと、データベースにデータをまったく挿入できなくなります(ここでは、数十万のドキュメントについて話していることを忘れないでください)。
簡単な例
var Potato = mongoose.model('Potato', PotatoSchema);
var potatoBag = [/* a humongous amount of potato objects */];
Potato.collection.insert(potatoBag, onInsert);
function onInsert(err, docs) {
if (err) {
// TODO: handle error
} else {
console.info('%d potatoes were successfully stored.', docs.length);
}
}
更新2019-06-22 :insert()
引き続き問題なく使用できますが、insertMany()
を優先して廃止されました 。パラメータはまったく同じなので、ドロップインの代替として使用でき、すべてが正常に機能するはずです(戻り値は少し異なりますが、とにかく使用していない可能性があります)。
リファレンス
- モンゴのドキュメント
- 一括挿入について話し合うGoogleグループのAaronHeckman