MongoDB filter multi sub-documents MongoDB filter multi sub-documents mongoose mongoose

MongoDB filter multi sub-documents


Use the following aggregation pipeline to get the desired result:

var pipeline = [    {        "$match": {            "name": "Andre",            "fruits.active": true,            "cars.active": true        }    },    { "$unwind": "$fruits" },    { "$unwind": "$cars" },    {        "$match": {                        "fruits.active": true,            "cars.active": true        }    },    {         "$group": {            "_id": {                "_id": "$_id",                "name": "$name"            },            "cars": { "$addToSet" : "$cars" },            "fruits": { "$addToSet" : "$fruits" }        }    },    {        "$project": {            "_id": 0,            "name": "$_id.name",            "cars": 1,            "fruits": 1        }    }    ]m_object.aggregate(pipeline)        .exec(function (err, result) {            if (err) {                console.log(err);                return;            }            console.log('result');        });

Or you can use the aggregation pipeline builder as follows:

m_object.aggregate()        .match({            "name": "Andre",            "fruits.active": true,            "cars.active": true         })        .unwind("fruits")        .unwind("cars")        .match({            "fruits.active": true,            "cars.active": true         })        .group({            "_id": {                "_id": "$_id",                "name": "$name"            },            "cars": { "$addToSet" : "$cars" },            "fruits": { "$addToSet" : "$fruits" }        })        .project({            "_id": 0,            "name": "$_id.name",            "cars": 1,            "fruits": 1        })        .exec(callback);