Mangosta crear varios documentos


Sé que en la última versión de Mongoose puede pasar varios documentos al método create, o incluso mejor en mi caso una matriz de documentos.

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

Mi problema es que el tamaño de la matriz es dinámico, por lo que en la devolución de llamada sería útil tener una matriz de los objetos creados.

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
    });
});

No está en la documentación, pero ¿es algo así posible?

Author: JohnnyHK, 2013-03-14

4 answers

Puede acceder a la lista de variables de parámetros a su devolución de llamada a través de arguments. Así que podrías hacer algo como:

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

    for (var i=1; i<arguments.length; ++i) {
        var candy = arguments[i];
        // do some stuff with candy
    }
});
 33
Author: JohnnyHK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-14 03:23:07

De acuerdo con este ticket en GitHub, Mongoose 3.9 y 4.0 devolverán un array si proporciona un array y un spread de argumentos si proporciona un spread cuando usa create().

 11
Author: Soviut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-17 23:41:08

Con Mangosta v5.1.5, podemos usar el método insertMany() con el array pasado.

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);
    });
 4
Author: Nebojsa Sapic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 22:14:10

Mediante la función insertar de la colección db, ejemplo:

Model.collection.insert(array, function(err, list) {
    if (err) {
        throw err;
    }

    console.log("\nlist:", list);
});
 0
Author: dimpiax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-25 15:21:17