【问题标题】:Creating objects in Model.js, NodeJs在 Model.js、NodeJs 中创建对象
【发布时间】:2020-08-07 17:26:27
【问题描述】:

在我的 model.js(使用 mongoose)中,我最初在 model.js 中创建了 40 个对象,这些对象将在整个程序中使用。任何文件中的其他函数都不会创建更多对象,而只会更新现有对象。

我的模型.js

var TicketSchema =  mongoose.model('Tickets', TicketSchema);

for(let i = 1;i<=40;i++)
{
    var new_ticket = new TicketSchema({ticket_number:i});
    new_ticket.save(function(err, ticket) {
   });
}

问题是我注意到一段时间后对象数量超过了 40 个。我想知道model.js是否在执行过程中运行了不止一次,还是只是由于反复调用npm run start然后关闭服务器?

还有没有更好的方法来创建最初用于整个程序的对象?

【问题讨论】:

  • 是否从数据库中删除这些票?在创建更多之前,您是否检查它们是否存在?还是每次启动时再创建 40 个?
  • 不,任何功能都不会删除工单。我只需要在整个执行过程中使用 40 个初始创建的对象
  • 那么随着时间的推移会有更多的惊喜吗?听起来您想要更多的 migration 模式,其中需要一次性初始化。或者只是先检查,然后只在需要时创建。
  • 不,我想知道是不是因为服务器关闭并再次运行?当我托管代码时,它会再次发生吗?
  • 是的,每次服务器启动时都会导入该文件并创建 40 个新票证。

标签: javascript node.js express object mongoose


【解决方案1】:

每次启动服务器时都会创建新的 40 个文档。如果记录已经存在,您可以使用此功能通过检查计数来避免创建。

const TicketModel =  mongoose.model('Tickets', TicketSchema);

const insertTicketNumber = async () => {
  try {
    const count = await TicketModel.countDocuments({});
    if (count) return;
    await TicketModel.create(
      [...Array(40).keys()]
        .map(i => i + 1)
        .map(number => ({ ticket_number: number }))
    );
  } catch (error) {
    console.log(error.message);
  }
};

【讨论】:

  • 这个函数没有添加项目,我得到一个空列表
  • 你调用了这个函数吗?
猜你喜欢
  • 2018-12-25
  • 1970-01-01
  • 2020-10-16
  • 2021-11-27
  • 2019-06-19
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多