Как запросить документ с наибольшим значением поля

#javascript #arrays #mongodb #object #mongoose

#javascript #массивы #mongodb #объект #мангуст

Вопрос:

Допустим, у меня есть коллекция документов. Чтобы упростить задачу, предположим, что все эти документы содержат всего 2 поля, name и id, как показано ниже.

Я хочу получить документ с наибольшим значением «id». Могу ли я использовать .find({}) с некоторыми параметрами? Если это так, я не могу понять, какой параметр найдет мне максимальное значение определенного поля.

 [
  {
    name: "name1",
    id: 1
  }
  {
    name: "name2",
    id: 2
  }
  {
    name: "name1",
    id: 3
  }
  {
    name: "name1",
    id: 0
  }
]
 

Ответ №1:

 let documents = [
  {
    name: "name1",
    id: 1
  },
  {
    name: "name2",
    id: 2
  },
  {
    name: "name1",
    id: 3
  },
  {
    name: "name1",
    id: 0
  }
];

let max = documents.sort( (a, b) => a.id > b.id ? -1 : 1)[0]
console.log( max ); 

Как насчет
let maxIdDocument = documents.sort( (a, b) => a.id > b.id ? 1 : -1)[0]

Ответ №2:

Сначала отсортируйте в порядке убывания, затем получите первое:

 const arr = [{
    name: "name1",
    id: 1
  },
  {
    name: "name2",
    id: 2
  },
  {
    name: "name1",
    id: 3
  },
  {
    name: "name1",
    id: 0
  }
];

const [greatest] = arr.sort(({ id: a }, { id: b }) => b - a);

console.log(greatest); 

Ответ №3:

Вы можете отсортировать этот массив и с помощью функции pop получить объект с наибольшим id значением .

 arr.slice() // This is to avoid a mutation on the original array.
 
 let arr = [   {     name: "name1",     id: 1   },   {     name: "name2",     id: 2   },   {     name: "name1",     id: 3   } ,  {     name: "name1",     id: 0   } ],
    greatest = arr.slice().sort(({id: a}, {id: b}) => a - b).pop();

console.log(greatest); 
 .as-console-wrapper { min-height: 100%; }