カスタムソートについては、3.4の以下の集計を試すことができます。
$add
を使用します
$addFields
の賛成票と反対票を合計します
計算された値をドキュメントの追加フィールドとして保持し、その後に $sort
フィールドで並べ替えます。
$project
期待される出力を得るためにソートフィールドを削除するための除外あり。
db.col.aggregate([
{"$addFields":{ "sort_order":{"$add":["$upvotes", "$downvotes"]}}},
{"$sort":{"sort_order":-1}},
{"$project":{"sort_order":0}}
])