@Dmitry221060

Как отсортировать записи по сумме значений вложенного объекта?

Есть коллекция, содержащая ID пользователя и статистику использования команд -
[{
    "userID": 0,
    "stat": {
        "command1": 5,
        "command4": 1
    }
},{
    "userID": 1,
    "stat": {
        "command2": 8,
        "command1": 1
    }
},{
    "userID": 2,
    "stat": {
        "command6": 1,
        "command3": 2,
        "command5": 1
    }
}]

Нужно отсортировать результаты myCollection.find({}) по общему количеству использованных команд(т.е. на первом месте будет пользователь "1", на втором - "0", а на третьем "2")

Как мне этого добиться(хотелось бы увидеть развёрнутый ответ, я недавно начал разбираться с БД)?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
@Dmitry221060 Автор вопроса
Ладно, я справился сам.
myCollection.aggregate([
    {'$project': {
        "stat": 1,
        "userID": 1,
        "statParsed": {"$objectToArray": "$stat"}
    }},
    {"$unwind": "$statParsed"},
    {"$group": {
        "_id": {
            "userID": "$userID", 
            "stat": "$stat"
        }, 
        "sum": {"$sum": "$statParsed.v"}
    }}
]).sort({"sum": -1}).toArray((err, data) => {
    ...
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы