#node.js #mongodb #express #mongoose
#node.js #mongodb #экспресс #mongoose
Вопрос:
Я хочу отображать данные элемента на основе данных сумбукинга, которые сортируются по убыванию, после чего самые популярные данные становятся верными, но у меня проблема с тем, что данные сортируются по возрастанию
const category = await Category.find()
.select("_id name")
.limit(3)
.populate({
path: "itemId",
select: "_id title sumBooking country city isPopular imageId",
perDocumentLimit: 4,
option: { sort: { sumBooking: -1 } },
populate: {
path: "imageId",
select: "_id imageUrl",
perDocumentLimit: 1,
},
});
for (let i = 0; i < category.length; i ) {
for (let x = 0; x < category[i].itemId.length; x ) {
const item = await Item.findOne({ _id: category[i].itemId[x]._id });
item.isPopular = false;
await item.save();
if (category[i].itemId[0] === category[i].itemId[x]) {
item.isPopular = true;
await item.save();
}
}
}
результаты приведенного выше Codingan приведут к такому изображению
то, что появится вверху, должно быть данными с sumBooking 6
Ответ №1:
Это не работает, вместо этого вы можете использовать aggregate, ваш запрос выглядит так
const category = await Category.aggregate([
{
$lookup: {
from: "items",
localField: "itemId",
foreignField: "_id",
as: "itemId",
},
},
{
$unwind: "$itemId",
},
{
$project: {
_id: 1,
name: 1,
"itemId._id": 1,
"itemId.title": 1,
"itemId.sumBooking": 1,
},
},
{
$sort: { "itemId.sumBooking": -1 },
},
]);
Комментарии:
1. заранее спасибо за помощь, приведенный выше код отобразил данные по убыванию, но я хочу, чтобы первые данные isPopular были истинными на основе категории имен, как на этом изображении ibb.co/KxfyqsC