Mongoose возвращает отфильтрованный результат

Я использую mongo db для хранения некоторых данных. Моя модель выглядит так:

const ItemSchema = mongoose.Schema({
  name: {
    type: String,
  },
  price: {
    type: Number,
  },})

Допустим, у меня есть несколько предметов с именем «Тест» и разной ценой и один предмет с именем «Тест2».

[{name:"Test", price: 20},{name:"Test", price: 10},{name:"Test", price: 5},{name:"Test2", price: 50}]

Как я могу получить результат из базы данных, которая возвращает имя и самую низкую цену для каждого имени элемента.

Единственное, что приходит в голову, это сделать что-то вроде этого

Item.find((err,res)=>{
 //Loop through items with forEach or map
 //res.map((item)=> ...
})

Есть лучший способ сделать это ?

JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
2
0
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это -

Item.aggregate(
    [
        {
            $group:
                {
                    _id: "$name",
                    lowestPrice: { $min: "$price" }
                }
        }
    ]
)

Смотрите мин агрегатор

Спасибо, я попробую, но я думаю, что мне нужно добавить _id:"$name", чтобы сгруппировать их по имени, все равно спасибо

MHB2011 21.12.2020 11:15

Конечно :) Обновил мой ответ

Prav 21.12.2020 11:17

Попробуй это:

db.getCollection('test').aggregate( 
[{ 
    $group : { 
        _id : "$name",
        price:{$min:"$price"} 
    }
}])

Вы можете попробовать это

Item.find((err,res)=>{
 //response
}).sort({'price': -1});

Другие вопросы по теме