【发布时间】:2017-02-19 03:18:37
【问题描述】:
我正在尝试使用 mongodb 上的聚合管道来检索 3 个随机文档。
$sample 看起来很理想,但返回的文档不能保证唯一。
关于如何生成 3 个唯一文档作为响应的任何想法?我猜它需要以我不确定的方式进一步使用聚合管道。
这当然是假设集合中有 3 个或更多文档。
谢谢。
【问题讨论】:
标签: javascript mongodb mongodb-query aggregation-framework
我正在尝试使用 mongodb 上的聚合管道来检索 3 个随机文档。
$sample 看起来很理想,但返回的文档不能保证唯一。
关于如何生成 3 个唯一文档作为响应的任何想法?我猜它需要以我不确定的方式进一步使用聚合管道。
这当然是假设集合中有 3 个或更多文档。
谢谢。
【问题讨论】:
标签: javascript mongodb mongodb-query aggregation-framework
您可以做的是请求更多数据,比如 100 个 $sample'd 文档,将这些文档按 _id 分组以删除重复项(为了唯一性)并将输出限制为所需的文档数:
db.test.aggregate([{
$sample: { size: 100 }
}, {
$group: {
_id: "$_id",
document: { $push: "$$ROOT" }
}
}, {
$limit: 3
}])
【讨论】:
根据我的测试方式,这个问题似乎实际上是建立在一个不正确的假设之上的。
$sample 确实返回了唯一的条目,根据定义,我只是发布了相同的请求,并没有意识到数据库已经被相同的请求过度填充。经过检查,objectID 实际上是唯一的,从而解决了问题(诚然,这首先是不存在的)。
【讨论】: