Как получить данные 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'];
Но ведь уровней может быть сколько угодно и для каждого писать метод это как то неправильно.
Можно ли это как то оптимизировать?
Спасибо.

21 Авг 2019 в 06:30
216 +1
0
Ответы
1

Для получения данных вложенных документов в 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']; // выводит имя под-подкатегории
}
}

Таким образом, вы сможете получить данные всех уровней вложенности без ограничения количества уровней.

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир