2017-02-25 64 views
-3

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

回答

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阶段中的数据量