2016-05-11 110 views

回答

1

假設你已經創建了一個數據庫連接組件如MongoDB的

$collection = \Yii::$app->mongodb->getCollection('yourcollection'); 
$result = $collection->aggregate([ 
      [ 
       "\$sample" => ["size"=>20] 
      ] 
      ]); 
vardump($result); 
0

至於MongoDB是關心你可以使用聚合框架$sample用於這一目的(3.2版新增):

db.products.aggregate([ 
    { $sample: { size: 20 } } 
]) 

以上聚合將從產品集合中選擇20個隨機文檔。

+0

是的,我知道的,但我會怎麼做,在Yii2? – alexandernst

+0

@alexandernst我認爲你的問題是mongo查詢。我從來沒有使用Yii2,[但看看它有一個使用聚合框架的聚合函數的文檔](http://www.yiiframework.com/doc-2.0/yii-mongodb-collection.html#aggregate() -詳情)。 – joao

-3

檢查MongoQuery的限制功能 希望這會有所幫助。

+0

限制不是隨機的。限制只會限制前N個文檔,但無論我運行查詢的次數如何,它們總是相同的。 – alexandernst

+0

然後根據文檔有沒有簡單的方法...你可以得到所有的項目,然後選擇隨機的項目,但這不是很有效。或者你可以編寫自己的函數來擴展原始的mongoQuery,並且你可以創建一個隨機的方法來使用純mongo調用。 – gpro