Я использую 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)=> ...
})
Есть лучший способ сделать это ?
Попробуй это -
Item.aggregate(
[
{
$group:
{
_id: "$name",
lowestPrice: { $min: "$price" }
}
}
]
)
Смотрите мин агрегатор
Конечно :) Обновил мой ответ
Попробуй это:
db.getCollection('test').aggregate(
[{
$group : {
_id : "$name",
price:{$min:"$price"}
}
}])
Вы можете попробовать это
Item.find((err,res)=>{
//response
}).sort({'price': -1});
Спасибо, я попробую, но я думаю, что мне нужно добавить _id:"$name", чтобы сгруппировать их по имени, все равно спасибо