从mongodb获取10个独特的随机问题,用于测验游戏

时间:2017-02-25 16:41:53

标签: mongodb mongoose aggregation-framework

我在mongodb有一个问题数据库,有10000个问题。我想为用户检索10个随机问题,使得它们不重复,直到所有选项都耗尽,然后我才能重置或循环。我很清楚处理随机部分的aggregate()和sample()但它们不提供唯一的行。处理这个问题的正确方法是什么?是否可以使用mongodb / mongoose或者我应该切换到mysql?

1 个答案:

答案 0 :(得分: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阶段的数据量