Как мне отобразить данные по убыванию в Express js и Mongoose?

#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 приведут к такому изображению

https://ibb.co/zZPHXDx

то, что появится вверху, должно быть данными с 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