0

In a node app, from a mongoose query, I try to add a new value on each result's object.

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);
});

Problem is my object doesn't change ... The value "markerNumer" from the count query doesn't appear in my 'sscategories' objects list.

Here is the log :

[ { 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) } ]

Appreciate your help.

1 Answer 1

1

Resolved ! I worked bad with the asynchronus system.

So the good way was to use the async library in waterfall and use a callback for async.each.

This code works :

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           
});

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.