#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%; }