最近接手一个项目,其中有一段代码,根据原则不应该在 for 循环中使用数据库的查询等操作。我想优化,但无从下手,请指导下。
const counts = users.length;
let i;
for(i = 0; i < counts; i++) {
const userID = msg.users[i].id;
const username = msg.users[i].username;
let user = await db.user.findOne({userid: userID, isleft: 1});
if (user) {
await db.user.findOneAndUpdate({userid: userID},{$set:{isleft: 0}});
} else {
await db.user.insert({userid: userID, username: username, isleft: 0});
}
db.close();
}
看上去是先查找了一下,如果数据库中存在则更新、不存在则插入。
那你可以用
Bulk.find.upsert
这个方法批量执行上述操作。