node.jsmongodb

MongoDB aggregate query with a where in node.js


I have the following mongodb query in node.js which gives me a list of unique zip codes with a count of how many times the zip code appears in the database.

collection.aggregate( [
    {
        $group: {
            _id: "$Location.Zip",
            count: { $sum: 1 }
        }
    },
    { $sort: { _id: 1 } },
    { $match: { count: { $gt: 1 } } }
], function ( lookupErr, lookupData ) {
        if (lookupErr) {
            res.send(lookupErr);
            return;
        }
        res.send(lookupData.sort());
    });
});

How can this query be modified to return one specific zip code? I've tried the condition clause but have not been able to get it to work.


Solution

  • Aggregations that require filtered results can be done with the $match operator. Without tweaking what you already have, I would suggest just sticking in a $match for the zip code you want returned at the top of the aggregation list.

    collection.aggregate( [
    {   
        $match: {
            zip: 47421
        }
    },
    {
        $group: {
    ...
    

    This example will result in every aggregation operation after the $match working on only the data set that is returned by the $match of the zip key to the value 47421.