在 MongoDB 异步中随机选择行

Random selection of rows in MongoDB async

所以我已经阅读了其他关于如何选择随机行的帖子,但 none 对我有用。

Random record from MongoDBHow to find random records in mongodb 都建议不再编译的过时解决方案。

向我的数据库添加额外的随机字段不是一个选项。

我想出了以下代码,但它也不起作用。

exports.randomX = function(req, res) 
{
    var x = req.params.x;
    db.collection('table', function(err, collection) {

        collection.count(function(err, count) {
            var r;
            var arr = [];
            for(var i=1; i<=x; i++)
            {
                r = Math.floor(Math.random() * count);
                collection.find().limit(1).skip(r).toArray(function(err, items) 
                {
                    arr.push(items[0]);

                    if(arr.length === x)
                        res.send(arr);
                });
            }
        });
    });
}

不确定这是否是您唯一的问题,但 x 将是一个字符串,因此如果您想将它与 arr.length 进行比较,您应该将其解析为数字或只使用 == 而不是 ===.

exports.randomX = function(req, res) 
{
    var x = req.params.x;
    db.collection('table', function(err, collection) {

        collection.count(function(err, count) {
            var r;
            var arr = [];
            for(var i=1; i<=x; i++)
            {
                r = Math.floor(Math.random() * count);
                collection.find().limit(1).skip(r).toArray(function(err, items) 
                {
                    arr.push(items[0]);

                    if(arr.length == x)
                        res.send(arr);
                });
            }
        });
    });
}