我有一张~8000 quiz questions
的表格。
它们分为25 categories
。
每个类别都有一个属性max_questions
,告诉我有多少问题需要randomly
来生成测验。
e.g
Category 1 -> 2 questions
Category 2 -> 3 questions
Category 3 -> 1 question
我提出了一个解决方案,但我需要大约2秒即可完成。
r.table('categories').pluck('id', 'max_questions').orderBy('id').run(conn, function(err, cursor) {
if(err) return next(new Error(err.msg));
cursor.toArray(function(err, categories) {
if(err) return next(new Error(err.msg));
async.concat(categories, function(category, callback) {
r.table('questions').filter({category_id: category.id }).sample(category.max_questions).run(conn, callback);
}, function(err, questions) {
if(err) return next(new Error(err.msg));
res.json(questions);
});
});
});
使用RethinkDB检索问题有更快捷的方法吗?一次测验发出25次请求并拨打25次.sample()
对我来说听起来不太好。
我真的很感谢你的帮助!
答案 0 :(得分:1)
如果您在一个查询中完成所有操作而不是向数据库发出多个请求,那么速度会快得多。这是一个或多或少等同于您所写内容的单个查询:
categories.map(function (doc) {
return doc.merge(
{"questions":
questions
.filter({category_id:doc("id")})
.sample(doc("max_questions"))
.coerceTo("ARRAY")})
})
注意我已将表绑定到变量,因此categories
绑定到r.table("categories")
。