Puoi provare sotto l'aggregazione in 3.4 per l'ordinamento personalizzato.
Usa $add
per sommare i voti positivi e negativi in $addFields
per mantenere il valore calcolato come campo aggiuntivo nel documento seguito da $sort
ordina per campo.
$project
con l'esclusione per eliminare il campo di ordinamento per ottenere l'output previsto.
db.col.aggregate([
{"$addFields":{ "sort_order":{"$add":["$upvotes", "$downvotes"]}}},
{"$sort":{"sort_order":-1}},
{"$project":{"sort_order":0}}
])