mongoDB集合未使用最新数据进行更新

时间:2019-07-19 13:51:27

标签: javascript mongodb mongoose

我正在进行一些API调用以从服务器获取数据,并希望将其存储在mongoDB中。我从远程服务器获取的数据可能包含也可能不包含重复数据。每当我获取重复数据时,我的代码就会正常工作,并且不会存储在数据库中,但是当我获取新数据时,这就是我的代码失败且不会存储在数据库中的地方。

在下面的代码片段中,当数据存储在数据库中时,我正在从mongoDB断开mongoose的连接。当我删除这行代码时,它按预期工作。但是我读到与数据库断开连接是个好习惯。

function MongoEDBedListStore (edBedList) {
  try {
    return edBedList.map((bedListRow) => {
      return EDBedList.findOneAndUpdate(
        { mrn: bedListRow.mrn, eventType: bedListRow.eventType },
        bedListRow,
        { upsert: true, new: true }
      )
      .exec()
      .then(() => console.log('ED Bed List Added'))
      .then(() => mongoose.disconnect())  //works well if i remove this line
      .catch((error) => {
        console.error(error);
        mongoose.disconnect();
      });
    });
  } catch (err) {
    console.error(err);
    mongoose.disconnect();
  }
}

有人可以让我知道删除断开逻辑是否很好,或者有其他方法可以解决此问题?

1 个答案:

答案 0 :(得分:0)

您正在执行同步映射,然后在第一个文档完成后断开连接。

如果您要使用承诺,我认为应该改为:

const updatePs = beds.map((bed) => BedList.findOneAndUpdate(...));
Promise.all(updatePs).then(() => "it'd be OK to disconnect here");

Bluebird可以使这样的代码更简洁(就像使用async / await一样)。

就断开/不断开而言,将取决于您的用例。如果您有处理请求的服务器,通常最好保持连接打开。如果是一次性工作,则最好在完成后关闭连接。