Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用节点express将对象数组保存到mongo数据库_Arrays_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Arrays 使用节点express将对象数组保存到mongo数据库

Arrays 使用节点express将对象数组保存到mongo数据库,arrays,node.js,mongodb,express,mongoose,Arrays,Node.js,Mongodb,Express,Mongoose,我正在尝试将对象数组预加载到MongoDB,如下所示: 如果我一次只处理一个对象,下面的代码可以工作。就是 如果我设置: tmp_obj = { id:1, name: 'Tmp 1' } 模型文件 路由文件 如何将对象数组推送到mongo?而且我还要添加多个集合。那么,我是不是要做一些类似的事情: tmp1.save(function (err) { if (err) return console.log(err); console.log('tmp1 saved t

我正在尝试将对象数组预加载到MongoDB,如下所示:

如果我一次只处理一个对象,下面的代码可以工作。就是

如果我设置:

tmp_obj = { 
  id:1, 
  name: 'Tmp 1' 
}
模型文件 路由文件 如何将对象数组推送到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');
  })
})
您可以使用mongoose中的方法一次插入多个文档

来自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
更好

另一种选择是使用方法,它可以接受对象数组或单个对象,并且您不需要创建模型实例(即
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');

});
最后一件事,如果发生错误,不要忘记终止请求/响应周期,否则页面将挂起

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

});