我正在尝试使用mongodb上的聚合管道来检索3个随机文档。
$sample
看起来很理想,但退回的文件不保证是唯一的。
有关如何生成3个独特文档的任何想法?我猜这需要进一步使用聚合管道,我不确定。
这当然假设集合中有3个或更多文档。
感谢。
答案 0 :(得分:1)
您可以做的是请求更多数据,比如100 $sample
'd个文档,按_id
对这些文档进行分组以删除重复项(为了唯一性)并将输出限制为所需的文档数:
db.test.aggregate([{
$sample: { size: 100 }
}, {
$group: {
_id: "$_id",
document: { $push: "$$ROOT" }
}
}, {
$limit: 3
}])
答案 1 :(得分:0)
根据我的测试方式,这个问题实际上是基于一个不正确的假设。
$sample
确实返回唯一条目,根据定义,我只是发布相同的请求,并没有意识到数据库已经过多地使用了同样的请求。在检查时,objectID实际上是唯一的,从而解决了问题(事实上,这首先是不存在的)。