L oop запрос базы данных против поиска - PullRequest
1 голос
/ 12 января 2020

У меня есть проблема, и в последнее время это вызывает головную боль. Поэтому мне нужна ваша помощь.

У меня есть 2 коллекции: Клиенты (A) и их история платежей (B) . Теперь мне нужно получить все данные из A и сопоставить их с B по customer_id, а затем показать их в виде отчета. Пример данных A равен 100 000, а B равен 500 000.

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

$customer_payments = $mongo_db->aggregate_pipeline('Customers',
    array(
        '$lookup' => array(
            'from' => 'payment_history',
            'localField' => 'customer_id',
            'foreignField' => 'id',
            'as' => 'payment_info',
        ),
    )
);

или я прочитал все A данные и l oop, а затем прочитал один за другим в базу данных, чтобы получить B данные и отобразить их?

$customers = $mongo_db->get('Customers');
foreach ($customers as $key => $cus) {
    $payment_info = $mongo_db->where('customer_id', $cus['id'])->get('payment_history');
    $cus['payment_info'] = $payment_info;
}

Я использую PHP и MongoDB. Мой лидер сказал мне не использовать поиск, а читать один за другим -_-.

В конце концов, какой из них лучше для меня и производительность сервера?

1 Ответ

1 голос
/ 12 января 2020

Определенно $ lookup

В вашем случае MongoDB выполняет левое внешнее соединение двух коллекций по индексируемому полю за очень короткое время и эффективным способом. Кроме того, вы можете продолжить этап конвейера с помощью payment_info.

. Итерация записей вручную крайне неэффективна (100 000 запросов в payment_history будут стоить PHP / MongoDB часов ...).

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