【问题标题】:Populating MongoDB in a loop in Node.js在 Node.js 中循环填充 MongoDB
【发布时间】:2018-12-21 03:22:49
【问题描述】:

我想使用 Node.js (mongoose) 填充 MongoDB 数据库。在建立数据库连接后,我正在尝试异步执行(使用 async.js),但它没有像我希望的那样工作。不是用少量文档填充数据库,而是在可以进行写入之前打开和关闭数据库连接。听起来像是一个非常典型的异步问题,但我不知所措。

我的代码目前如下。

var runStart = '2019-01-01 00:00:00';
var runEnd = '2019-01-17 00:00:00';
var periods = [];
var d = moment(runStart);
while (d < moment(runEnd)) {
  periods.push([d.format(), d.add(1, 'day').format()]);
}

mongoose.connect(config.db);
const db = mongoose.connection;
db.on('error', () => {
  throw new Error('unable to connect to database');
});
db.on('open', () => {
  console.log('DB open');
  async.each(
    periods,
    function(period, next) {
      Period({
        start: moment(period[0]),
        end: moment(period[1]),
        type: 'delivery',
        notes: ''
      }).save((err) => {
        if (err) callback(err);
      });
      next();
    },
    function(err) {
      db.close();
      console.log('FINISHED!');
    });
});

我做错了什么?

【问题讨论】:

    标签: node.js mongodb mongoose async.js


    【解决方案1】:
       function(period, next) {
          Period({
            start: moment(period[0]),
            end: moment(period[1]),
            type: 'delivery',
            notes: ''
          }).save((err) => {
            if (err) callback(err); // `callback` is supposed to be `next
          });
          next();  // `next` is called before the document is saved
        },
    

    将该代码更改为:

    function(period, next) {
      Period({
        start: moment(period[0]),
        end: moment(period[1]),
        type: 'delivery',
        notes: ''
      }).save((err) => {
        next(err);
      });
    },
    

    【讨论】:

    • 宾果游戏!谢谢。我仍在努力异步思考,所以这让我忙了几个小时才发帖。很高兴我离得这么近!感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多