2017-02-19 81 views
1

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

$sample看起来是理想的,除了返回的文件不保证是唯一的。

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

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

谢谢。

回答

1

你可以做的是要求更多的数据是什么,比方说100 $sample“d单据,_id集团这些文件删除重复项(唯一性),并限制输出到所需的文件数:

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

感谢您的回复。 这是假设我的集合的大小为100或更大,实际上我实际上是从0增加我的集合,并希望检索每个新条目的3个文档。 我知道这意味着处理前3个条目作为特例... 有没有进一步的想法?谢谢 – Adam

0

看起来这个问题实际上是建立在一个不正确的假设上的,这是基于我测试的方式。

$sample确实返回了唯一的条目,根据定义,我只是发布相同的请求,并没有意识到数据库已经被这个相同的请求过度填充。经过检查,objectID实际上是独一无二的,从而解决了这个问题(当然,这并不存在于第一位)。