如何通过一次调用将一组对象保存到mongoose DB?

时间:2012-04-03 04:59:19

标签: javascript node.js mongodb mongoose

有没有办法将一个JSON对象数组保存到只有一个调用的mongodb? 类似的东西:

schemeObject.save(array_of_json_object, callback);

我正在使用mongoosejs

5 个答案:

答案 0 :(得分:31)

有一种方法可以使用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

答案 1 :(得分:9)

我认为mongooosejs不可能。但是,您可以使用本机支持的mongodb的BATCH插入。

有用的链接:

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

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

答案 2 :(得分:0)

这样的事情怎么样?我知道它循环遍及整个数组..不要问我关于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
        }
    });
});

答案 3 :(得分:0)

我使用过的另一种解决方法。如果您使用带有promises的mongoose,则可以使用Q执行此操作。

您可以使用以下代码开始使用Q作为mongoose的默认承诺:

const mongoose = require('mongoose');
mongoose.Promise = require('q').Promise;

然后你可以保存一系列文件,如下所示。我们假设我们正在存储一组用户模型,我已经在users变量中显示了这些模型。

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

.save()将返回q承诺并使用数组map函数,我们将使用用户模型数组创建一个promise数组。

答案 4 :(得分:0)

这也适用于mongoose

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