我正在进行一些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();
}
}
有人可以让我知道删除断开逻辑是否很好,或者有其他方法可以解决此问题?
答案 0 :(得分:0)
您正在执行同步映射,然后在第一个文档完成后断开连接。
如果您要使用承诺,我认为应该改为:
const updatePs = beds.map((bed) => BedList.findOneAndUpdate(...));
Promise.all(updatePs).then(() => "it'd be OK to disconnect here");
Bluebird可以使这样的代码更简洁(就像使用async / await一样)。
就断开/不断开而言,将取决于您的用例。如果您有处理请求的服务器,通常最好保持连接打开。如果是一次性工作,则最好在完成后关闭连接。