在Mongoose中的一个集合的随机文件

我想创build一个Schema.statics.random函数,使我从集合中获取一个随机元素。 我知道有一个本地的MongoDB驱动程序的例子,但我不能在Mongoose中工作。

我在GitHub Gist中发现了这个Mongoose Schema静态函数,它应该能够实现你所追求的。 它计算集合中的文档数量,然后在跳过随机数量后返回一个文档。

 QuoteSchema.statics.random = function(callback) { this.count(function(err, count) { if (err) { return callback(err); } var rand = Math.floor(Math.random() * count); this.findOne().skip(rand).exec(callback); }.bind(this)); }; 

来源: https : //gist.github.com/3453567

NB我修改了一下代码,使其更具可读性。

如果您不想在模式中添加“testing”代码,则使用Mongoose查询。

 Model.count().exec(function(err, count){ var random = Math.floor(Math.random() * count); Model.findOne().skip(random).exec( function (err, result) { // result is random }); }); 

我已经实现了一个mongoose的插件,这是以一种非常有效的方式使用2dsphere索引在两个随机生成的坐标上使用$ near查询来实现的。 看看这里: https : //github.com/matomesc/mongoose-random 。