$соответствует поиску$, если дата публикации

#mongodb #lookup

Вопрос:

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

Что я пробовал

 [{$match: {
  'active': true,
  'station': {
    $all: ['DRN1']
  }
}}, {$lookup: {
  'from': 'episode',
  'localField': 'url',
  'foreignField': 'show_b',
   pipeline: [
          {
            $match: {
              "episode.pubDate":{$lte:new Date()}
          }

      }
  ],
  'as': 'match_docs'
}}, {$project: {
  'id': 1,
  'title': 1,
  'icon': 1,
  'banner': 1,
  'url': 1,
  'last': {
    '$slice': ['$match_docs.pubDate',-1]
  },
  'latestepisode': {
    '$slice': ['$match_docs', -1]
  }
}}, {$sort: {
  'last': -1
}}]
 

проблема в трубопроводе.
ошибка, которую я получаю, это

$поиск с помощью «конвейера» может не указывать «Локальное поле» или «Внешнее поле»

Ответ №1:

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

 [{$match: {
  'active': true,
  'station': {
    $all: ['DRN1']
  }
}}, {$lookup: {
  'from': 'episode',
  'localField': 'url',
  'foreignField': 'show_b',
  'as': 'match_docs'
}}, {$project: {
  'id': 1,
  'title': 1,
  'icon': 1,
  'banner': 1,
  'url': 1,
  'match_docs':{
    '$filter':{
      "input" : "$match_docs",
                     "as" : "item",
                     "cond" : { "$lte" : ["$item.pubDate",new Date()]}
    }
  },
  'last': {

          '$slice': ['$match_docs.pubDate',-1]
  },
  'latestepisode': {
    '$slice': ['$match_docs', -1]
  }
}}, {$project: {
  'id': 1,
  'title': 1,
  'icon': 1,
  'banner': 1,
  'url': 1,
  'last': {
    '$slice': ['$match_docs.pubDate',-1]
  },
  'latestepisode': {
    '$slice': ['$match_docs', -1]
  }
}}, {$sort: {
  'last': -1
}}]