有没有办法将一个JSON对象数组保存到只有一个调用的mongodb? 类似的东西:
schemeObject.save(array_of_json_object, callback);
我正在使用mongoosejs
答案 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);
});