Cómo ordenar con la sum de 2 campos en MongoDB

Tengo este documento:

{ "_id": "59b804e1ee8a4071a5ea3fcc", "description" : "description", "imagepath" : "https://example.com", "type" : "label", "downvotes" : -25, "upvotes" : 15, "language" : "en", "approoved" : true }, { "_id": "59b804e1ee8a4071a5ea4dfd", "description" : "description", "imagepath" : "https://example.com", "type" : "label", "downvotes" : 0, "upvotes" : 30, "language" : "en", "approoved" : true } 

¿Cómo ordenar estos 2 objetos por la sum de los valores de upvotes y downvotes ?

(el objeto con id 59b804e1ee8a4071a5ea4dfd debe aparecer primero y así sucesivamente)

He tratado de agregar con

 {"$group" : { _id:{upvotes:"$upvotes",downvotes:"$downvotes"}, count:{$sum:1} }} 

pero agrupa todos los documentos similares. No puedo entender el proceso agregado / syntax.

EDITAR: según la respuesta de Veeram, aquí está el código de trabajo que utiliza la mongoose en caso de que alguien se caiga aquí:

 Labels.aggregate([ {"$addFields":{ "sort_order":{"$add":["$upvotes", "$downvotes"]}}}, {"$sort":{"sort_order":-1}}, {"$project":{"sort_order":0}} ]).exec(function (err, labels) { if (err) { return res.status(404).json({ error: err }); } res.status(200).json(labels); }); 

Puede probar debajo de la agregación en 3.4 para ordenación personalizada.

Use $add para sumr los upvotes y downvotes en $addFields para mantener el valor computado como el campo adicional en el documento seguido de $sort sort on field.

$project con exclusión para soltar el campo de ordenación para obtener el resultado esperado.

 db.col.aggregate([ {"$addFields":{ "sort_order":{"$add":["$upvotes", "$downvotes"]}}}, {"$sort":{"sort_order":-1}}, {"$project":{"sort_order":0}} ]) 

Podría crear un nuevo campo en cada documento que represente la sum de upvotes y downvotes. Y luego ordenar los documentos en este nuevo campo:

 db.collection.aggregate([ { $addFields: { "votes": { $sum: [ "$downvotes", "$upvotes"] } } }, { $sort: { "votes": -1 } } ])