web-dev-qa-db-ja.com

1回の呼び出しでオブジェクトの配列をmongoose DBに保存する方法は?

one呼び出しのみでJSONオブジェクトの配列をmongodbに保存する方法はありますか?何かのようなもの:

schemeObject.save(array_of_json_object, callback);

mongoosejsを使用しています

17
jAckOdE

Mongooosejsではそれは不可能だと思います。ただし、ネイティブでサポートされているmongodbのBATCH挿入を使用できます。

便利なリンク:

http://www.mongodb.org/display/DOCS/Inserting#Inserting-Bulkinserts

https://groups.google.com/forum/#!msg/mongoose-orm/IkPmvcd0kds/bZuYCN_orckJ

9
DhruvPathak

MongooseJSで一括挿入する方法があります。この質問に対する回答があったため、それが新機能かどうかはわかりませんが、誰かが検索からここに来たのなら、彼らはその方法を知っているはずです。

var array = [{ type: 'Jelly bean' }, { type: 'snickers' }];
Candy.create(array, function (err, jellybean, snickers) {
  if (err) // ...
});

ここにドキュメントがあります: http://mongoosejs.com/docs/api.html#model_Model.create

32
Dan Mandle

これはマングースでも機能します

Laptop.insertMany(laptopData, function (err, laptop) {
  if (err) {
    console.log(err);
  };
  console.log(laptop);
});
1
Admir

私が使用した別の回避策。 promiseでmongooseを使用している場合は、 [〜#〜] q [〜#〜] を使用してこれを実行できます。

以下のコードを使用して、Qをmongooseのデフォルトのプロミスとして使用できます。

_const mongoose = require('mongoose');
mongoose.Promise = require('q').Promise;
_

次に、以下のようにドキュメントの配列を保存できます。 users変数で示したUserモデルの配列を格納しているとしましょう。

_Q
  .all(users.map(curr => curr.save()))
  .then((results) => { //do something })
  .catch((err) => { //handle error })
_

.save()q promiseを返し、配列map関数を使用して、ユーザーモデル配列を使用してpromise配列を作成します。

0
Deepal

このようなものはどうですか?私はそれが配列全体をループすることを知っています..このためにBig Oについて私に尋ねないでください..おそらく挿入する最良の方法ではありませんが、ある種の初期データダンプだけで機能します。

var arr = // array of objects;
    res = [];

arr.forEach(function (item) {
    item.save(function (err) {
        res.Push(err);
        if (res.length === arr.length)
        {
            // Done
        }
    });
});
0