【问题标题】:nodejs async parse and modify list of json object from mongodbnodejs异步解析和修改来自mongodb的json对象列表
【发布时间】:2014-03-14 23:32:05
【问题描述】:

在节点应用程序中,通过猫鼬查询,我尝试在每个结果的对象上添加一个新值。

Sscategory.find({}, null, {sort:{'system_name':1}}, function (err, sscategories) {        
    var i = 0;
    async.each(sscategories, function(sscategory, err) { 
        Marker2sscategory.count({'_sscategory' : sscategory._id}, function(err, count) {
            if (err) return console.log(err);
            sscategories[i].markerNumber = count;
            i++;
        });
    });
    console.log(sscategories);
});

问题是我的对象没有改变...计数查询中的值“markerNumer”没有出现在我的“sscategories”对象列表中。

这是日志:

[ { name_fr: 'Aménagement de locaux',
name_en: 'Aménagement de locaux',
system_name: 'amenagement_de_locaux',
_id: 52fe27664139302d2c151449,
__v: 0,
uptade_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET),
create_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET) },
{ name_fr: 'Animaux domestiques',
name_en: 'Animaux domestiques',
system_name: 'animaux_domestiques',
_id: 52fe27664139302d2c15144b,
__v: 0,
uptade_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET),
create_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET) },
{ name_fr: 'Architecte',
name_en: 'Architecte',
system_name: 'architecte',
_id: 52fe27664139302d2c15144e,
__v: 0,
uptade_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET),
create_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET) },
{ name_fr: 'Restaurant',
name_en: 'Restaurant',
system_name: 'restaurant',
_id: 52fe27664139302d2c151451,
__v: 0,
uptade_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET),
create_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET) },
{ __v: 0,
_id: 52fe27664139302d2c15145b,
name_de: 'aarrrr',
name_en: 'Service de traiteur',
name_fr: 'Service de traiteur',
system_name: 'service_de_traiteur',
uptade_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET),
create_date: Fri Feb 14 2014 15:25:42 GMT+0100 (CET) } ]

感谢您的帮助。

【问题讨论】:

    标签: javascript json node.js mongodb asynchronous


    【解决方案1】:

    解决了! 我在异步系统上工作得不好。

    所以好的方法是在瀑布中使用异步库并为 async.each 使用回调。

    此代码有效:

    var countMarker = function(sscategory, callback) {
        Marker2sscategory.count({'_sscategory' : sscategory._id}, function(err, count) {
            if (err) return console.log(err);
            callback(null, count);
        });   
    };
    
    async.waterfall([
        function(callback) {
            // select sub categories
            Sscategory.find({}, null, {sort:{'system_name':1}}, function (err, sscategories) {
                callback(null, sscategories);
            });
        },
        function(sscategories, callback) {
            var arr = [];
            // for each subcategory, count markers
            async.each(sscategories, function(sscategory, callback) {
                countMarker(sscategory, function(err, count) {
                    if (err) return console.log(err);
                    sscategory.markerNumber = count;
                    arr.push(sscategory);
                    callback();
                });
            }, function(err) {
                callback(null, arr);    
            });
        }
    ], function(err, result) {
        console.log(result); // final result, can render in template here           
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2017-03-20
      • 2019-11-26
      • 1970-01-01
      • 2017-08-19
      • 2017-10-12
      相关资源
      最近更新 更多