Search code examples
arraysmongodbmatchaggregateis-empty

MongoDB aggregate match non-empty array


I have a collection in a MongoDB that contains a field "events" which is an array. I need to write an aggregate query for this that checks for the events array to not be empty, but can't find a way to do this.

I want something like:

db.collection.aggregate([
    { 
        $match: { 
            events: {
                "$empty": false 
            }
        }
    }
]);

Solution

  • After some digging around and having tried several options (including a nasty project of $gte: 0 of the $size followed by a match on that projected field) I eventually found the following makes sense and actually works:

    db.collection.aggregate([
        { 
            $match: { 
                "events.0": {
                    "$exists": true 
                }
            }
        }
    ]);