【问题标题】:Get 10 unique random questions from mongodb for a quiz game从 mongodb 获取 10 个独特的随机问题,用于问答游戏
【发布时间】:2017-07-16 11:18:10
【问题描述】:
我在 mongodb 中有一个包含 10000 个问题的测验数据库。我想为用户检索 10 个随机问题,这样它们就不会重复,直到所有选项都用尽,然后我才能重置或循环返回。我很清楚处理随机部分的 aggregate() 和 sample() 但它们不提供唯一的行。处理这个问题的正确方法是什么?是否可以使用 mongodb/mongoose 或者我应该切换到 mysql?
【问题讨论】:
标签:
mongodb
mongoose
aggregation-framework
【解决方案1】:
一种解决方案是从您的集合中请求更多文档,$group 结果以确保给定结果是唯一的,然后将结果计数限制为 10:
Model.aggregate([{
$sample: { size: 100 }
}, {
$group: {
_id: "$_id",
document: { $push: "$$ROOT" }
}
}, {
$limit: 10
}], function(err, res) {
if (err) {
console.log(err);
return;
}
console.log(res);
})
如果最终没有10个文档,则需要再次查询或增加$sample阶段的数据量