mongodb — проблема повторяющихся объектов

Я работаю над сайтом, на котором наши системные администраторы могут выбирать, получать ли наши данные из mongodb илиasticsearch. Я могу настроить оба хорошо, но я хочу настроить случай переключения, который выберет правильную систему поиска документов на основе предпочтений в разделе администратора сайтов. Когда mongo возвращает объект stdClass, я могу перебрать объект, чтобы напечатать каждый элемент, используя что-то вроде следующего:

foreach($items as $item)
{
print_r($item);
}

Затем я могу получить общее количество возвращенных элементов, используя $ items-> count (). Тем не менее, при использованииasticsearch мне возвращается объект, в который мне нужно перейти:

foreach($items['hits']['hits'] as $item)
{
print_r($item);
}

Счет можно получить с помощью $ items [‘hit’] [‘total’]. Если я извлекаю массив элементов (назовем его «$ finalitems» и счетчик (назовем его $ count) из возвращаемых данныхasticsearch, как я могу преобразовать это в объект stdClass, например, что возвращает Монго, чтобы я мог выполнять итерацию напрямую? через класс, чтобы получить значение каждого элемента, а также вызов метода count (), который будет получать счетчик? Я хочу сделать это так, чтобы я мог легко переключаться между двумя объектами данных, не имея полностью отдельных функций обработки та же задача.

0

Решение

Я не рекомендую конвертировать ElasticSearch привести к MongoDB результат (или наоборот) по нескольким причинам. Одна из них заключается в том, что, хотя сейчас будет казаться, что вам будет легче, если вы будете использовать их как один и тот же объект, в будущем, когда потребуется использовать / манипулировать большим количеством полей, это может стать кошмаром.

Одним из решений является то, что вы создаете новый класс, скажем DocumentItemи преобразовать оба MongoDB А ТАКЖЕ ElasticSearch результаты в этот класс. Таким образом, часть вашего кода, которая манипулирует, выполняет итерации, выполняет другие операции над возвращаемым значением обоих MongoDB а также ElasticSearch будет работать на DocumentItem объект, используя его определенные методы.

И у вас будет две функции преобразования для перевода MongoDB & ElasticSearch вернуть значения этому объекту. В будущем, если необходимо добавить новое поле, вам нужно будет соответствующим образом обновить функции преобразования. И если добавлен новый сервер документов, вам нужно только написать функцию преобразования, так как DocumentItem класс уже четко определен.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]