Gaurav Umrani
Gaurav Umrani

Reputation: 134

Cant able to find subdocument counts based on condition

I have a schema in which it has some fields.. i am not able to find query for this, i tried $group but was not able to find results
collection: tasks

{
    "_id" : ObjectId("5a475ee4b342fa03e71192bd"),
    "title" : "Some Title",
    "assignedUsers" : [
        {
            "_id" : ObjectId("5a47386ee4788102e530f60d"),
            "name" : "Sam",
            "status" : "Unconfirmed"
        },
        {
            "_id" : ObjectId("5a473878e4788102e530f60f"),
            "name" : "Ricky",
            "status" : "Rejected"
        }
        {
            "_id" : ObjectId("5a47388be4788102e530f611"),
            "name" : "Niel",
            "status" : "Unconfirmed"
        },
        {
            "_id" : ObjectId("5a47388be4788102e530f611"),
            "name" : "ABC",
            "status" : "Unconfirmed"
        },
        {
            "_id" : ObjectId("5a473892e4788102e530f612"),
            "name" : "Rocky",
            "status" : "Rejected"
        }
    ]
}

Result should contain Unconfirmed=3 Rejected=2

Thanks

Upvotes: 0

Views: 45

Answers (1)

Avij
Avij

Reputation: 694

Use below query,

db.coll3.aggregate([{
            $unwind: '$assignedUsers'
        }, {
            $group: {
                _id: '$assignedUsers.status',
                'count': {
                    $sum: 1
                }
            }
        }
    ])

If you want to query against a particular document make sure, you use a $match as first stage and then use the other 2 $unwind and $group. You would get result as

{ "_id" : "Rejected", "count" : 2 }
{ "_id" : "Unconfirmed", "count" : 3 }

Hope this helps.

Upvotes: 1

Related Questions