Mongoose 查询时Javascript变量范围

标签 javascript node.js mongodb

我正在使用node.js、mongoose 和foursquare API。

            foursquare.getVenues(params, function(err, venues) {
            if(err) return res.json(JSON.stringify({status: 'error', returnData: err}));

            // variable initialization
            var rooms = [];
            var vanueItem;

            // iterate foursquare return list (venue item)
            venues.response.venues.forEach(function(item) { 
                Room.aggregate(
                    [
                    { "$group": { 
                            "_id": '$mobileUser.genderType', 
                            "genderTypeCount": { "$sum": 1 }
                        }}
                    ],
                    function(err,result) {
                    if(err) return res.json(JSON.stringify({status: 'error', returnData: err}));

                    // build it to return after
                    vanueItem = 
                        {
                            id: item.id,
                            name: item.name,
                            description: item.description,
                            contact: item.contact.formattedPhone,
                            lat: item.location.lat,
                            lng: item.location.lng,
                            distance: item.location.distance,
                            city: item.location.city
                        };  

                        // insert it into venue array
                        rooms.push(vanueItem);  
                     }
                );
            });

            return res.json(JSON.stringify({ status: 'success', returnData: rooms }));
        });

我的房间数组有问题。当我删除“Room.aggregate”查询时,工作正常(所有房间都可以),但是当我使用聚合时,返回函数给我空房间。

我已经尝试从 'var rooms = [];' 中删除 var

最佳答案

Room.aggregate是异步函数,如果你想迭代异步函数,你可以使用异步库,就像这样

var async = require('async');

foursquare.getVenues(params, function(err, venues) {

    if (err) return res.json(JSON.stringify({
        status: 'error',
        returnData: err
    }));

    var rooms = [];
    var vanueItem;

    async.each(venues.response.venues, function (item, next) {
        Room.aggregate(
            [{
                "$group": {
                    "_id": '$mobileUser.genderType',
                    "genderTypeCount": {
                        "$sum": 1
                    }
                }
            }],
            function(err, result) {
                if (err) {
                    return next(err);
                }

                // build it to return after
                vanueItem = {
                    id: item.id,
                    name: item.name,
                    description: item.description,
                    contact: item.contact.formattedPhone,
                    lat: item.location.lat,
                    lng: item.location.lng,
                    distance: item.location.distance,
                    city: item.location.city
                };

                rooms.push(vanueItem);

                next(null);
            }
        );

    }, function (err) {
        if (err) {
            return res.json(JSON.stringify({
                status: 'error',
                returnData: err
            }));
        }          

        return res.json(JSON.stringify({
            status: 'success',
            returnData: rooms
        }));
    });
});

关于 Mongoose 查询时Javascript变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314953/

相关文章:

javascript - AngularJS View 未加载

node.js - Babel 不尊重忽略 API 选项

node.js - 意想不到的 ... sequelize.js 中的选项

node.js - 即使将 ttl 设置为零后,AWS APIGateway lambda 授权者缓存策略也是如此

python - MongoDB node.js驱动安装需要Python吗?

javascript - 无法修复 Mongoose 覆盖模型错误

javascript - fs.writeFileSnyc/fs.writeFile 写入损坏的文件

javascript - 为什么 readdirSync 会自动对结果进行排序?

java - 在客户端分析 Mongo

javascript - 我如何从node.js中的请求 block 写入(打印)文档