MongoDB从集合中返回6个随机行

时间:2013-02-21 18:23:40

标签: php mongodb random find

您好我想从集合中随机显示6行。每一行作为时间戳,所以我可以使用它但我的问题是如何从集合中只返回6行并使其随机

这是我的收藏样本 - 我使用PHP

{
   "age": "2",
   "breed": "Bengal",
   "dislikes": "Dislikes being patted by people",
   "likes": "Like to purr and get headbutts. Sleeps on our bed, with Woody our dog, and also comes in for food at 6pm, loves Tin fish and is known to meow quite lo [...]",
   "lost": true,
   "pet_lost_date": NumberInt(1361366445),

   "type": "cat" 
}

我看到了这个 。db.items.find()跳过(randonNumberHere).limit(1); - MongoDB: Pulling multiple random documents from a collection

但是我不理解它,我理解的是find()找到所有skip()跳过多个行和limit(),这是返回的数量。

然而,我的问题更多是关于让所有丢失的宠物随机出现并只显示6

public function lost_pets($no){
        $collection = static::db()->ipet_mypet;
        $pet = $collection->find(array('lost': true, '$where'=> function(){var randomNumber=Math.random(); return this.random>=randomNumber || this.random>randomNumber })).sort(array('pet_lost_date'=> 1)).limit(6);
    }

3 个答案:

答案 0 :(得分:0)

你可以用这个:

db.collection.find({'lost': true, $where: function(){var randomNumber=Math.random(); return this.pet_lost_date>=randomNumber || this.pet_lost_date>randomNumber }}).next();

Find({'lost':true})获取字段'lost'的文档:true。

$ where子句返回一个DBCursor,它指向一个特定的文档。通过调用“next()”,我们获得光标指向的下一个文档。所以我们一次取一个随机文档。

答案 1 :(得分:0)

根据我逻辑上看的方式,简单的方法是使用随机数保存记录,然后在从数据库读取时按该数字排序。

答案 2 :(得分:0)

假设您有20条记录 你想随机获取5条记录

我们将生成0到20之间的随机跳过值 - 限制值(5)= 15 有了这个,我们肯定会返回5条记录,即使随机跳过值从15开始。
如果我们从总记录中减去随机值后,我们也可以强制跳过值为零

示例代码:

$total_records = $collection->count(); <br>
$limit = 5; <br>
$skip = mt_rand(0, $total_records);<br>
$collection->find()->skip($skip < 0 ? 0 : $skip)->limit($limit);