mongodb pymongo motordriver tornado-motor

mongodb - ¿Cómo ocultar_id de la agregación?



pymongo motordriver (3)

Tengo esta consulta:

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

el resultado me da esto:

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

para que pueda hacer

prod = produits["result"] [{u''_id'': None, u''pup'': [{u''avt'': {u''fto'': ..all the results}}]}]

pero ¿cómo escondo "_id" para que solo pueda obtener

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

en las consultas normales, solo agrego algo como {"_id":0} aquí no funciona.


Desde mongodb docs

Puede $ proyectar los resultados para excluir el _id : ¿esto es lo que quiere decir?

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

Nota El campo _id siempre se incluye de forma predeterminada. Puede excluir explícitamente _id de la siguiente manera:

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

De su ejemplo, la primera operación en la tubería sería excluir el _id e incluir los otros atributos.


Esto no es exactamente una manera de hacerlo, pero puede usar esta fábrica para generar un objeto que incluya todo excepto _id

/** * Factory that returns a $project object that excludes the _id property https://docs.mongodb.com/v3.0/reference/operator/aggregation/project/ * @params {String} variable list of properties to be included * @return {Object} $project object including all the properties but _id */ function includeFactory(/* properties */){ var included = { "_id": 0 }; Array.prototype.slice.call(arguments).forEach(function(include){ included[include] = true }) return { "$project": included } }

Entonces úsalo así:

cities.aggregate( { "$group": { "_id": null, "max": { "$max": "$age" }, "min": { "$min": "$age" }, "average": { "$avg": "$age" }, "total": { "$sum": "$count" } } }, includeFactory(''max'',''min'',''average'',''total'') )


No estoy familiarizado con el motor, pero debería poder eliminar la propiedad de los resultados dictados directamente.

>>> produits = {u''ok'': 1.0, u''result'': [{u''_id'': None, u''pup'': [{u''avt'': {u''fto'': ''whatever''}}]}]} >>> prod = produits[''result''] >>> del prod[0][''_id''] >>> print prod [{u''pup'': [{u''avt'': {u''fto'': ''whatever''}}]}]