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