Mongodb фильтры присоединяются - PullRequest
0 голосов
/ 16 мая 2018

У меня есть 2 таблицы: пользователи и платежи. Я хочу отфильтровать платежи неактивных пользователей, зарегистрированных в прошлом месяце. SQL-эквивалент: Выберите * из платежей Внутренние пользователи присоединяются к u.id = payment.user_id Где u.active = 0 и дата> сейчас () - 30 * 24 * 60 * 60.

Проблема в том, что монго не поддерживает соединения. Я должен сначала запросить пользователей, а затем платежи с user_id {$ in: ...} Столы большие и медленные.

Теперь представьте, что платежи имеют product_id, и у меня есть большая таблица продуктов, и мне нужно добавить фильтр продуктов. Продукт имеет категорию. Если для каждого фильтра мне нужно добавить еще один запрос, то не только скорость будет плохой, но и код станет большим и грязным.

Есть ли другой хороший способ сделать это Спасибо

1 Ответ

0 голосов
/ 17 мая 2018

Следующий запрос Монго должен помочь. Смоделируйте его в соответствии с именами коллекции / атрибута.

    db.payments.aggregate([
    {   $lookup: {
                  from: "users", 
                  let: { payment_userid: "$user_id"},
                  pipeline: [
                    { $match:
                             { $expr:
                                     { $and:
                                       [
                                         { $eq: [ "$$payment_userid",  "$id"] },
                                         { $gt: [ { $subtract: [ new Date(), "$date" ] },numberLong(2592000000)  ] }
                                       ]
                                     }
                             }
                    }
                 ],
                 as: "joineddata"
        },
        {"$match":{"joineddata" : {$ne:[]}}}
     ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...