#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
}}]