46

Mongooseの最新バージョンでは、複数のドキュメントをcreateメソッドに渡すことができます。私の場合は、ドキュメントの配列を渡すこともできます。

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

私の問題は、配列のサイズが動的であるため、コールバックで作成されたオブジェクトの配列があると便利なことです。

var array = [{ type: 'jelly bean' }, { type: 'snickers' }, ..... {type: 'N candie'}];
Candy.create(array, function (err, candies) {
    if (err) // ...

    candies.forEach(function(candy) {
       // do some stuff with candies
    });
});

ドキュメントにはありませんが、このようなことは可能ですか?

4

5 に答える 5

49

を介して、コールバックへのパラメータの変数リストにアクセスできますarguments。したがって、次のようなことができます。

Candy.create(array, function (err) {
    if (err) // ...

    for (var i=1; i<arguments.length; ++i) {
        var candy = arguments[i];
        // do some stuff with candy
    }
});
于 2013-03-14T03:23:07.247 に答える
35

Mongoose v5.1.5では、配列が渡された状態でinsertMany()メソッドを使用できます。

const array = [
    {firstName: "Jelly", lastName: "Bean"},
    {firstName: "John", lastName: "Doe"}
];

Model.insertMany(array)
    .then(function (docs) {
        response.json(docs);
    })
    .catch(function (err) {
        response.status(500).send(err);
    });
于 2018-06-18T22:14:10.127 に答える
11

GitHubのこのチケットによると、Mongoose 3.9および4.0は、配列を指定すると配列を返し、を使用するときにスプレッドを指定すると引数のスプレッドを返しますcreate()

于 2015-01-17T23:41:08.840 に答える
4

マングースv5以降、マングースのサイトinsertManyに よると、以下よりも高速です。.create()

ドキュメントの配列を検証し、それらがすべて有効な場合はMongoDBに挿入するためのショートカット。この関数は.create() 、ドキュメントごとに1つではなく、1つの操作のみをサーバーに送信するためよりも高速です。

完全な例:

const mongoose = require('mongoose'); 
  
// Database connection 
mongoose.connect('mongodb://localhost:27017/databasename', { 
    useNewUrlParser: true, 
    useCreateIndex: true, 
    useUnifiedTopology: true
}); 
  
// User model 
const User = mongoose.model('User', { 
    name: { type: String }, 
    age: { type: Number } 
}); 


// Function call, here is your snippet
User.insertMany([ 
    { name: 'Gourav', age: 20}, 
    { name: 'Kartik', age: 20}, 
    { name: 'Niharika', age: 20} 
]).then(function(){ 
    console.log("Data inserted")  // Success 
}).catch(function(error){ 
    console.log(error)      // Failure 
});
于 2021-01-08T23:27:20.283 に答える
2

insertコレクションdbの機能による例:

Model.collection.insert(array, (err, list) => {
  if (err) throw err;

  console.log('list:', list);
});
于 2015-12-25T15:21:17.407 に答える