Search code examples
mongodbpymongomotordrivertornado-motor

How to hide _id from Aggregation?


I've this query:

produits = yield motor.Op(db.users.aggregate, [{"$unwind":"$pup"},{"$match":{"pup.spec.np":nomp}}, {"$group":{"_id":"$pup.spec.id","pup":{"$push":"$pup"}}}])

which gives me this result:

print produits

{u'ok': 1.0, u'result': [{u'_id': None, u'pup': [{u'avt': {u'fto': ..all the results}}]}]}

so I can do:

prod = produits["result"]

[{u'_id': None, u'pup': [{u'avt': {u'fto': ..all the results}}]}]

but how can I hide "_id" so that I can only get:

[{u'pup': [{u'avt': {u'fto': ..all the results}}]}]

in a normal query I would simply add something like {"_id":0} but here it doesn't work.


Solution

  • From mongodb docs

    You can $project the results to exclude the _id - is this what you mean?

    http://docs.mongodb.org/manual/reference/aggregation/#pipeline

    Note The _id field is always included by default. You may explicitly exclude _id as follows:

    db.article.aggregate(
        { $project : {
            _id : 0 ,
            title : 1 ,
            author : 1
        }}
    );
    

    From you're example, the first operation in the pipeline would be to exclude the _id and include the other attribs.