我正在尝试将对象数组预加载到MongoDB,如下所示:
如果我一次只做一个对象,下面的代码就可以了。就是这样,
如果我设置:
tmp_obj = {
id:1,
name: 'Tmp 1'
}
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var TmpSchema = new Schema({
id: Number,
name: String
});
var Tmp= mongoose.model('Tmp', TmpSchema);
module.exports = Tmp;
var express = require('express');
var router = express.Router();
var Tmp = require('../models/tmp');
var tmp_obj = [
{
id:1,
name: 'Tmp 1'
},
{
id:2,
name: 'Tmp 2'
},
{
id:3,
name: 'Tmp 3'
}
];
var tmp = new Tmp(tmp_obj);
tmp.save(function (err) {
if (err) return console.log(err);
console.log('tmp saved to the database');
return res.redirect('/login');
})
如何将一组对象推送到mongo?我还有多个要添加的集合。所以,我可以这样做:
tmp1.save(function (err) {
if (err) return console.log(err);
console.log('tmp1 saved to the database');
tmp2.save(function (err) {
if (err) return console.log(err);
console.log('tmp2 saved to the database');
return res.redirect('/login');
})
})
答案 0 :(得分:1)
另一种选择是使用.create()方法,它可以接受一个对象数组或一个对象,而你不需要创建一个模型实例(即var tmp = new Tmp(tmp_obj);
),这里是一个例如:
var Tmp = require('../models/tmp');
var tmp_obj = [
{ id:1, name: 'Tmp 1' },
{ id:2, name: 'Tmp 2' },
{ id:3, name: 'Tmp 3' }
];
Tmp.create(tmp_obj, function (err, temps) {
if (err) {
console.log(err);
// terminate request/response cycle
return res.send('Error saving');
}
res.redirect('/login');
});
最后一点,如果发生错误,请不要忘记终止请求/响应周期,否则页面将挂起
答案 1 :(得分:0)
您可以使用mongoose中的方法insertMany一次插入多个文档。
来自mongoose v5.0.4的文档
var arr = [{ name: 'Star Wars' }, { name: 'The Empire Strikes Back' }];
Movies.insertMany(arr, function(error, docs) {});
使用.save()
的替代方案是
// Create all objects
const objects = tmp_obj.map(x => new Tmp(x));
try {
// Saves objects
const docs = await Promise.all(objects.map(x => x.save()));
} catch(e) {
// An error happened
}
但你不应该使用它,因为insertMany
更好