Я использую версию mongodb 3.6.
У меня есть таблица транспортных средств с такими документами, как
{
"_id": ObjectId("5b976220d2ccda12fc0050fb"),
"VehicleNumber": "JK 678",
"NumberOfSeats": "47",
}
{
"_id": ObjectId("67976220d2ccda12fc005068"),
"VehicleNumber": "JK 779",
"NumberOfSeats": "47",
}
У меня есть таблица маршрутов с такими данными, как
{
"_id": ObjectId("5b7fb426d2ccda11fc005185"),
"Name": "New Jersey City",
"VehicleDetails": [
{
"VehicleEntryId": "b8d0d2b5-8f32-6850-4d79-34ed79138d6d",
"VehicleId": ObjectId("5b976220d2ccda12fc0050fb"),
...
"Status": "Active"
},
{
"VehicleEntryId": "b8d0d2b5-8f32-6850-4d79-34ed79138568",
"VehicleId": ObjectId("67976220d2ccda12fc005068"),
...
"Status": "Active"
}
],
...
}
У меня естьписьменный запрос агрегации mongodb, такой как
$cursor = $this->collection->aggregate([
['$match' => ["_id" => new MongoDB\BSON\ObjectID('5b7fb426d2ccda11fc005185')]],
[
'$addFields' => [
'filteredIds' => [
'$map' => [
'input' => '$VehicleDetails',
'as' => 'item',
'in' => [
'$cond' => [
['$eq' => ['$$item.Status', 'Active']],
'$$item.VehicleId',
false
]
]
]
]
]
],
array(
'$lookup' => array(
'from' => 'VehicleTbl',
'$pipeline' => [
[ '$match'=> ["_id" => ['$in' => ['$$filteredIds'] ]]],
],
'as' => 'AllotedVehicleDetails'
)
),
])->toArray();
В основном я пытаюсь выбрать все назначенные транспортные средства для определенного маршрута.Поэтому я сначала извлекаю все активно назначенные идентификаторы транспортных средств, используя оператор $ addFeilds, и помещая их в «FilterIds», а затем при поиске пытаюсь получить информацию о транспортных средствах из таблицы транспортных средств, используя конвейер.Приведенный выше код выдает сообщение об ошибке «Неполученное исключение» MongoDB \ Driver \ Exception \ RuntimeException с сообщением «$ lookup аргумент» $ pipe: [{$ match: {_id: {$ in: ["$$ FilterIds"]}}}] 'должна быть строкой, это массив типов' в строке № 32.
Пожалуйста, помогите !!!