@nexcode

Mongodb. Как оставить в массиве элемент с максимальным значением?

{
       "_id": 1,
       "values":[
          {
             "value1":10,
             "value2":12,
             "value3":30
          },
          {
             "value1":20,
             "value2":12,
             "value3":100
          },
          {
             "value1":30,
             "value2":14,
             "value3":50
          }
       ]
    }
    {
       "_id": 2,
       "values":[
          {
             "value1":10,
             "value2":12,
             "value3":60
          },
          {
             "value1":20,
             "value2":12,
             "value3":80
          },
          {
             "value1":30,
             "value2":14,
             "value3":70
          }
       ]
    }


Мне нужно оставить один документ с одним элементом в массиве по следующим критериям:

values.value1 = 20
    values.value2 = 12
    values.value3 максимальное значение из всех значений values.value3 во всех документах


Например, по вышеуказанным критериям должен получиться такой документ:

{
       "_id": 1,
       "values":[
          {
             "value1":20,
             "value2":12,
             "value3":100
          }
       ]
    }


Также, подойдет решение, просто сортирующие документы и элементы по указанным критериям. Чтобы первым документом был тот, в котором значение values.value3 максимально из возможных и первым элементом в массиве был объект с максимальным значением. Например:

{
       "_id": 1,
       "values":[
         {
             "value1":20,
             "value2":12,
             "value3":100
          },
          {
             elements...
          }
       ]
    }
    {
       "_id": 2,
       "values":[
          {
             elements...
          }
       ]
    }


Сделать это у меня получается, но я использую $match, $unwind, $group, $redact, $sort по несколько раз. Может быть кто-то предложит более правильную реализацию.
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lega
Сделать это у меня получается, но я использую
Если это разовая операция, то все нормально.
Если частая, то я бы поменял структуру документов так, чтобы модификация и чтение документов были простыми, быстрыми командами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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