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

Posted

技术标签:

【中文标题】从 mongodb 获取 10 个独特的随机问题,用于问答游戏【英文标题】:Get 10 unique random questions from mongodb for a quiz game 【发布时间】:2017-07-16 11:18:10 【问题描述】:

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

【问题讨论】:

【参考方案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阶段的数据量

【讨论】:

以上是关于从 mongodb 获取 10 个独特的随机问题,用于问答游戏的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:如何在 100 个集合中找到 10 个随机文档?

从 MongoDB 集合中的特定文档开始获取“n”个文档

如何从 mongodb 获取数据以放入选项中?

获取带替换的随机样本

技术讲座(10/15周日)刨析NoSQL之MongoDB的独特优势和应用场景,和其企业应用分析及趋势

js从数组中随机获取n个不重复的数据