У меня есть сводный запрос, где я присоединяюсь к 3 коллекциям.Я хотел бы отфильтровать поиск по полям из двух этих коллекций.Проблема в том, что я могу использовать $ match только для начальной коллекции, с которой mongoose инициализируется.
Вот запрос:
var pipeline = [
{
$lookup: {
from: 'blurts',
localField: 'followee',
foreignField: 'author.id',
as: 'followerBlurts'
}
},
{
$unwind: '$followerBlurts'
},
{
$lookup: {
from: 'users',
localField: 'followee',
foreignField: '_id',
as: 'usertbl'
}
},
{
$unwind: '$usertbl'
},
{
$match: {
'follower': { $eq: req.user._id },
//'blurtDate': { $gte: qryDateFrom, $lte: qryDateTo }
}
},
{
$sample: { 'size': 42 }
},
{
$project: {
_id: '$followerBlurts._id',
name: '$usertbl.name',
smImg: '$usertbl.smImg',
text: '$followerBlurts.text',
vote: '$followerBlurts.vote',
blurtDate: '$followerBlurts.blurtDate',
blurtImg: '$followerBlurts.blurtImg'
}
}
];
keystone.list('Follow').model.aggregate(pipeline)
.sort({blurtDate: -1})
.cursor().exec()
.toArray(function(err, data) {
if (!err) {
res.json(data);
} else {
console.log('Error getting following blurts --> ' + err);
}
});
В конвейере я могу использовать только $совпадение по модели «Follow».Когда я использую $ match для модели Blurt, она просто игнорирует условие (вы можете увидеть, где я пытался включить его в закомментированную строку в $ match).
Что вызывает недоумение, так это то, что я могу использовать этополе в методе .sort, но не в условиях $ match.
Любая помощь высоко ценится.