Mongodb过滤器加入

时间:2018-05-16 19:25:16

标签: mongodb

我有2个表:用户和付款。 我想过滤上个月注册的非活动用户的付款。 SQL等价物: 从付款中选择* 内部联接用户u在u.id = payments.user_id上 其中u.active = 0且日期>现在() - 30 * 24 * 60 * 60。

问题是mongo不支持连接。 我必须首先查询用户然后使用user_id {$ in:...}付款 表很大而且很慢。

现在假设付款有product_id,我有大产品表,必须添加一些产品过滤器。 产品有类别。 如果对于每个过滤器,我必须添加另一个查询,不仅速度很差,而且代码变得庞大而且混乱。

还有其他好办法吗? 感谢

1 个答案:

答案 0 :(得分:0)

以下mongo查询应该有所帮助。根据集合/属性名称对其进行模型化。

    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:[]}}}
     ])