Как получить данные 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
195 +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 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир