为什么Mongo查询中的回调永远不会被调用?

时间:2013-02-23 04:34:51

标签: javascript mongodb

在以下查询中,回调函数永远不会触发。它几乎是一个查询的逐字克隆,在我的应用程序的其他地方工作正常。所以我无法弄清问题是什么。有人能发现我做错了吗?

var imagesCollection = db.collection('Images');

    var Images = new Array();

    while(Images.length < quantity) {
        var random = Math.random();

            imagesCollection.find({
                "audioFiles.audioLanguage": audioLanguage,
                "random": {
                    $lte: random
                }
            }).limit(1, function(err, doc) {
                console.log('This never gets called');
                Images.push(doc);
            });

    }
    callback(err, Images);

2 个答案:

答案 0 :(得分:0)

quantity

var quantity = 10;  //declare variable to whatever number it needs to be
var imagesCollection = db.collection('Images');
var Images = new Array();

while(Images.length < quantity) {
//rest of code here...

看看这是否有助于你。

答案 1 :(得分:0)

你的while循环实际上是一个无限循环,因为只要循环正在运行就不能调用find回调,并且只有在运行了足够的回调后循环才会退出。

此外,limit将光标传递给回调,而不是文档,因此您应该使用findOne代替。

您需要将其重写为:

var imagesCollection = db.collection('Images');
var Images = new Array();

for (var i=0; i<quantity; i++) {
    var random = Math.random();
    imagesCollection.findOne({
        "audioFiles.audioLanguage": audioLanguage,
        "random": {
            $lte: random
        }
    }, function(err, doc) {
        if (Images.push(doc) === quantity) {
            callback(err, Images);
        }
    });
}