0

嗨,我想从集合中随机显示 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().skip(randonNumberHere).limit(1); - MongoDB:从集合中提取多个随机文档

但我不明白,我从中了解到的只是 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);
    }
4

3 回答 3

0

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

于 2015-03-09T10:46:07.100 回答
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()”,我们获得了光标指向的下一个文档。所以我们一次获取一个随机文档。

于 2013-02-21T18:31:03.747 回答
0

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

我们将生成一个介于 0 到 20 - 极限值 (5) = 15 之间的随机跳跃值。
这样,即使随机跳跃值从 15 开始,
我们也可以确保返回 5 条记录。我们也可以强制跳跃值为零,如果在我们从总记录中减去随机值后,它变为负数

示例代码:

$total_records = $collection->count(); <br>
$limit = 5; <br>
$skip = mt_rand(0, $total_records);<br>
$collection->find()->skip($skip < 0 ? 0 : $skip)->limit($limit);
于 2015-11-22T08:50:24.063 回答