2017-02-19 80 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實際上是獨一無二的,從而解決了這個問題(當然,這並不存在於第一位)。