如何從MongoDB獲取N個隨機文檔(使用Yii2)?從Yii2獲取MongoDB的隨機文檔
有一些特殊的方法,比如
Products::find()->random(20)->asArray()->all()
如何從MongoDB獲取N個隨機文檔(使用Yii2)?從Yii2獲取MongoDB的隨機文檔
有一些特殊的方法,比如
Products::find()->random(20)->asArray()->all()
假設你已經創建了一個數據庫連接組件如MongoDB的
$collection = \Yii::$app->mongodb->getCollection('yourcollection');
$result = $collection->aggregate([
[
"\$sample" => ["size"=>20]
]
]);
vardump($result);
至於MongoDB是關心你可以使用聚合框架$sample用於這一目的(3.2版新增):
db.products.aggregate([
{ $sample: { size: 20 } }
])
以上聚合將從產品集合中選擇20個隨機文檔。
檢查MongoQuery的限制功能 希望這會有所幫助。
限制不是隨機的。限制只會限制前N個文檔,但無論我運行查詢的次數如何,它們總是相同的。 – alexandernst
然後根據文檔有沒有簡單的方法...你可以得到所有的項目,然後選擇隨機的項目,但這不是很有效。或者你可以編寫自己的函數來擴展原始的mongoQuery,並且你可以創建一個隨機的方法來使用純mongo調用。 – gpro
是的,我知道的,但我會怎麼做,在Yii2? – alexandernst
@alexandernst我認爲你的問題是mongo查詢。我從來沒有使用Yii2,[但看看它有一個使用聚合框架的聚合函數的文檔](http://www.yiiframework.com/doc-2.0/yii-mongodb-collection.html#aggregate() -詳情)。 – joao