【问题标题】:Mongoose disconnecting after all save operations done完成所有保存操作后 Mongoose 断开连接
【发布时间】:2019-03-19 23:34:32
【问题描述】:

我正在循环进行保存操作。 (我没有收集那些承诺,也没有等待所有保存完成) 完成所有操作后如何断开与数据库的连接?

我想做这样的事情:

没有足够的内存来收集这些承诺

【问题讨论】:

  • 收集这些承诺并等待所有保存完成。
  • 我不想收集那些承诺!
  • 您希望这还能如何工作?
  • 如果您不想收集有关操作何时完成的信息,您如何想象知道操作何时完成?我想你可以延迟 10 分钟使用setTimeout。那么你可以很确定 1:保存操作完成,2:你写的代码效率很低。
  • 见上面编辑过的问题

标签: node.js mongoose


【解决方案1】:

您可以使用.disconnect() 关闭与猫鼬的连接。见https://mongoosejs.com/docs/api.html#mongoose_Mongoose-disconnect

关于跟踪操作何时完成 - 这就是承诺的用途。

确保每个项目都已创建的简单方法如下:

var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
const Schema = mongoose.Schema;

const schema = new Schema({
  name: Number,
});
const model = mongoose.model('test', schema);

async function run() {
  mongoose.connect(`mongodb://localhost/test`);
  for (let i = 0; i < 1000; i++) {
    await model.create({ name: i });
  }
  mongoose.disconnect();
}

run()
  .then(() => {
    console.log('completed exec');
  })
  .catch((err) => {
    console.error('Error during exec', err);
  })

这不是一个很好的实现,但它完成了工作。 你应该研究的事情是:

  1. 可以批量请求吗?例如。使用insertMany
  2. 错误处理/可连续性 - 如果在运行期间失败会发生什么?我们应该停止还是继续,但记录错误?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2022-07-27
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多