заселить в совокупности с мангустом

#node.js #mongodb #express #mongoose #aggregate

Вопрос:

У меня есть три коллекции и схемы: Пользователь, Продукт и Заказ. А также три схемы :

 const User = new Schema({
   username: {
     type: String,
     required: true,
   },
)};


const Product = new Schema({
   name: {
     type: String,
     required: true,
   },
)};


const Order = new Schema({
   product: {
     type: mongoose.Schema.Types.ObjectId,
     ref: 'Product',
     required: true,
   },
   User: {
     type: mongoose.Schema.Types.ObjectId,
     ref: 'User',
     required: true,
   },
   quantity: {
     type: Number,
     required: true,
   },
)};
 

Чтобы получить вложенные объекты, я использую Product.find().populate('user product') .

Однако в списке продуктов я использую Агрегацию для разбиения на страницы вместо использования поиска. Что эквивалентно заполнению в агрегации? потому что я проверил поиск, но он не работает.

 let filter = {};
let data = [];
let total = [{ total: 0 }];
filter = { user: mongoose.Types.ObjectId(req.user.id) };
data = await Product.aggregate([
  {
    $match: filter,
  },
  {
    $lookup: {
      from: 'users',
      localField: 'user',
      foreignField: '_id',
      as: 'user',
    },
  },
  { $unwind: '$user' },
  {
    $project: {
      'user.password': 0,
    },
  },
  {
    $match: {
      $or: [
        { 'user.username': { $regex: search, $options: 'x,g,i' } },
      ],
    },
  },
  {
    $limit: limit,
  },
]);
if (data.length > 0) {
  total = await Product.aggregate([
    {
      $match: filter,
    },
    {
      $lookup: {
        from: 'users',
        localField: 'user',
        foreignField: '_id',
        as: 'user',
      },
    },
    { $unwind: '$user' },
    {
      $match: {
        $or: [
          { 'user.username': { $regex: search, $options: 'x,g,i' } },
        ],
      },
    },
    {
      $count: 'total',
    },
  ]);
}
 

Я видел другие вопросы, связанные с той же проблемой, но ни один из них, похоже, не работает для меня, я был бы очень признателен, если бы вы помогли мне решить эту проблему, спасибо!