Mongodb使用$ sample提供唯一值

时间:2017-02-19 03:18:37

标签: javascript mongodb mongodb-query aggregation-framework

我正在尝试使用mongodb上的聚合管道来检索3个随机文档。

$sample看起来很理想,但退回的文件不保证是唯一的。

有关如何生成3个独特文档的任何想法?我猜这需要进一步使用聚合管道,我不确定。

这当然假设集合中有3个或更多文档。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以做的是请求更多数据,比如100 $sample'd个文档,按_id对这些文档进行分组以删除重复项(为了唯一性)并将输出限制为所需的文档数:

db.test.aggregate([{
    $sample: { size: 100 }
}, {
    $group: {
        _id: "$_id",
        document: { $push: "$$ROOT" }
    }
}, {
    $limit: 3
}])

答案 1 :(得分:0)

根据我的测试方式,这个问题实际上是基于一个不正确的假设。

$sample确实返回唯一条目,根据定义,我只是发布相同的请求,并没有意识到数据库已经过多地使用了同样的请求。在检查时,objectID实际上是唯一的,从而解决了问题(事实上,这首先是不存在的)。