что я пытаюсь сделать, это соединить две коллекции, а затем возвращать элементы whome имена существуют внутри массива
эти модели
Модель автомобиля
id,
carAuthorizedDrivers:[String],
garageId:{type: Schema.ObjectId,ref:garage}
driversModel
id,
garageId:{type: Schema.ObjectId,ref:garage}
drivers:[{name:String,skill:String}]
это результат объединения
id:1D99399379773,
carAuthorizedDrivers:[DriverA,DriverB],
garageId:010003,
JoinDrivers:[drivers:[{name:DriverA,skill:89},{name:DriverB,skill:77},{name:DriverC,skill:45}]]
Я хочу, чтобы ограничить Joindrivers с целью только показывая водитель (имя + навыки) whome имен принадлежат carAuthorizedDrivers, поэтому я хочу joinDrivers содержать только следующее:
{name:DriverA,skill:89},{name:DriverB,skill:77}
то, что я пытался сделать следующее:
join () {
return new Promise(function (resolve, reject) {
Car.aggregate([
{
$lookup: {
from: 'drivers', // collection name in db
localField: 'garage_id',
foreignField: 'garage_id',
as: 'joinDrivers'
}
},
{ $unwind: '$Joindrivers' },
{ $unwind: '$Joindrivers.drivers' },
{ $unwind: '$carAuthorizedDrivers' },
{ $match: { 'Joindrivers.drivers.name': { $in: 'carAuthorizedDrivers' } } }
]).exec((err, result) => {
if (err) {
reject(err)
}
resolve(result)
})
})
}
Я получаю $ в нуждающихся в ОШИБОК массива , но если я ставлю массив вручную , как это:
$match: { 'Joindrivers.drivers.name': { $in: [DriverA,DriverB] } }
$ В хорошо работает, и я получаю результат, как мне решить эту проблему?