我正在搭建一个平台,让学生在上面进行模拟测试。一旦测试完成,将为他们生成相对于尝试上述测试的其他学生的结果。
报告包含多个参数,例如排名、批次内的排名,以及人们在给定测试中获得的平均分数等内容都会更新。
为了获得这些数据中的每一个,我需要在数据库上执行一个单独的查询,然后我需要更新1.尝试测试的当前用户的结果2.其他所有人的结果(即每个人的排名在新的尝试中发生变化)
因此,我需要执行多个查询来获取数据,并运行2-3个更新查询来设置新数据。
鉴于mongodb调用是异步的,我找不到一种方法将所有这些数据收集在一个地方进行更新。
一种方法是将下一个查询放在前一个查询的回调函数中,但我觉得应该有比这更好的方法。
发布于 2019-08-12 23:17:52
也许你可以使用Promise.all()
示例:
const initialQueries = []
initialQueries.push("Some promise(s)")
Promise.all(initialQueries).then(results => {
// After all initialQueries are finished
updateQueries()
}).catch(err => {
// At least one failed
})发布于 2019-08-13 00:11:14
使用db.collection.bulkWrite。它允许多个文档插入,更新(通过_id或自定义过滤器),甚至删除。
const ObjectID = require('mongodb').ObjectID;
db.collection('tests').bulkWrite([
{ updateOne : {
"filter" : { "_id" : ObjectID("5d400af131602bf3fa09da3a") },
"update" : { $set : { "score" : 20 } }
}
},
{ updateOne : {
"filter" : { "_id" : ObjectID("5d233e7831602bf3fa996557") },
"update" : { $set : { "score" : 15 } }
}
}
]);3.2版中的新功能。
https://stackoverflow.com/questions/57463867
复制相似问题