У меня есть таблица TblStudent в mongodb, например
{
"_id": ObjectId("5baa85041d7859f40d000029"),
"Name": "John Doe",
"RollNo": 12,
"Class": "Ist"
....
}
У меня есть другая таблица TblRoute, например
{
"_id": ObjectId("5baa818d1d78594010000029"),
"Name": "New york City",
"StopDetails": [
{
"StopId": "abc777",
"Name": "Block no 3"
},
{
"StopId": "abc888",
"Name": "Block no 4"
}
],
"NumberOfSeats": "10",
"StudentDetails": [
{
"StudentId": ObjectId("5baa85041d7859f40d000029"),
"VehicleId": "7756"
},
{
"StudentId": ObjectId("5baa85f61d7859401000002a"),
"VehicleId": "7676"
}
]
}
Я использую платформу mongodb 3.6.Я использую приведенные ниже строки кода после получения онлайн-справки !!!
$query = ['_id' => new MongoDB\BSON\ObjectID($this->id)];
$cursor = $this->db->TblRoute->aggregate([
['$match' => $query],
['$lookup' => [
'from' => "TblStudent",
'let' => ['studentid' => '$StudentDetails.StudentId'],
'pipeline' => [
['$match' => ['$expr'=> ['$in' => ['$_id','$$studentid' ]]]],
['$project' => ['Name'=> 1,'RollNo' => 1, '_id'=> 1]]
],
'as' => 'studentObjects',
]],
['$unwind'=> '$studentObjects' ],
// Group back to arrays
[ '$group'=> [
'StudentDetails.StudentId'=> '$_id',
'StudentDetails.StudentData'=> [ '$push'=> '$studentObjects' ]
]]
]);
Выдает сообщение об ошибке Uncaught исключение 'MongoDB \ Driver \ Exception \ RuntimeException' с сообщением 'Поле' StudentDetails.StudentId 'должнобыть объектом-накопителем "
По сути, я хотел получить данные из другой таблицы с использованием агрегации поиска. Поэтому после онлайн-справки и дальнейших исследований я смог написать приведенный выше код. Основная проблема заключается в том, что кодперед оператором $ unwind генерировать вывод в виде отдельного массива. Если мы напишем 'as' => 'StudentDetails.studentObjects' в $ lookup, данные будут перезаписаны новыми данными, что приведет к потере других полей, таких как vehicleid и т. д. Я хочусохраните их. Поэтому после исследования я попытался добавить $ group, чтобы вернуть его во встроенный документ StudentDetails.
Требуемый вывод
{
"_id": ObjectId("5baa818d1d78594010000029"),
"Name": "New york City",
"StopDetails": [
.....
],
"StudentDetails": [
{
"StudentId": ObjectId("5baa85041d7859f40d000029"),
"VehicleId": "7756",
"StudentData": [
"Name": ..
"RollNo":...
]
},
{
"StudentId": ObjectId("5baa85f61d7859401000002a"),
"VehicleId": "7676",
"StudentData": [
"Name": ..
"RollNo":...
]
}
]
}
Пожалуйста, помогите мне разобраться в проблеме