Как получить данные childs в mongodb? Всем привет. Подскажите как правильно получить данные вложенных документов? Пример:{ "_id" : ObjectId("11b97aa654bce61356002559"), "name" : "Category", "childs" : [ { "_id" : ObjectId("22b55aa654bce61356002559"), "name" : "sub-category", // под категория "childs" : [ { "_id" : ObjectId("33b55aa654bce61356002559"), "name" : "sub-sub-category", //Категория третьего уровня "childs": "" } ] } ] } Мне нужно получить под категорию.$category = Categories::findOne(['childs._id' => $id]) -> childs; foreach ($category as $cat); $cat['name']; Но как мне получить категорию третьего уровня?$category = Categories::findOne(['childs._id' => $id]) -> childs; foreach ($category as $cat); foreach ($cat as $c); $c['name']; Но ведь уровней может быть сколько угодно и для каждого писать метод это как то неправильно. Можно ли это как то оптимизировать? Спасибо.
Этот запрос найдет документ, в котором есть вложенный документ в массиве childs, у которого также есть вложенный документ в массиве childs с указанным _id.
Далее вы можете использовать циклы для обхода всех уровней вложенности:
foreach ($category['childs'] as $subcategory) { echo $subcategory['name']; // выводит имя подкатегории foreach ($subcategory['childs'] as $subsubcategory) { echo $subsubcategory['name']; // выводит имя под-подкатегории } }
Таким образом, вы сможете получить данные всех уровней вложенности без ограничения количества уровней.
Для получения данных вложенных документов в MongoDB вы можете использовать оператор $elemMatch.
В вашем случае, чтобы получить категорию третьего уровня, вы можете использовать следующий запрос:
$category = Categories::findOne(['childs.childs._id' => $id]);Этот запрос найдет документ, в котором есть вложенный документ в массиве childs, у которого также есть вложенный документ в массиве childs с указанным _id.
Далее вы можете использовать циклы для обхода всех уровней вложенности:
foreach ($category['childs'] as $subcategory) {echo $subcategory['name']; // выводит имя подкатегории
foreach ($subcategory['childs'] as $subsubcategory) {
echo $subsubcategory['name']; // выводит имя под-подкатегории
}
}
Таким образом, вы сможете получить данные всех уровней вложенности без ограничения количества уровней.