Mongodb过滤器连接

Mongodb过滤器连接,mongodb,Mongodb,我有两个表:用户和付款。 我想过滤上个月注册的非活动用户的付款。 SQL等效项: 从付款中选择* 在u.id=payments.user\u id上内部加入用户u 其中u.active=0,date>now()-30*24*60*60 问题是mongo不支持连接。 我必须首先查询用户,然后使用用户id{$in:…}进行付款 桌子很大,而且很慢 现在想象一下,付款有产品id,我有一个大的产品表,必须添加一些产品过滤器。 产品有分类。 如果对于每个过滤器,我必须添加另一个查询,不仅速度不好,而且代码

我有两个表:用户和付款。 我想过滤上个月注册的非活动用户的付款。 SQL等效项: 从付款中选择* 在u.id=payments.user\u id上内部加入用户u 其中u.active=0,date>now()-30*24*60*60

问题是mongo不支持连接。 我必须首先查询用户,然后使用用户id{$in:…}进行付款 桌子很大,而且很慢

现在想象一下,付款有产品id,我有一个大的产品表,必须添加一些产品过滤器。 产品有分类。 如果对于每个过滤器,我必须添加另一个查询,不仅速度不好,而且代码变得庞大而混乱

还有别的好办法吗
谢谢

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

MongoDB确实支持某种类型的连接。签出$lookup:请注意,您可能希望以完全不同的(“文档”)样式对数据进行建模,例如,将特定用户的所有付款保存在用户自身内部的数组中。我需要规范化的数据谢谢。这个只有两个过滤器,看起来又大又乱。如果我有10个过滤器,如在现实世界中过滤类别,例如用户国家等,查询将像1000行长。以sql为例,它更简单、更有效。我需要规范化的数据,我不需要在付款表id中推送的所有内容都不可缩放。任何附加的筛选部分都将位于$expr下。Mongodb使用JSON查询语言,因此语法无法与SQL进行比较。与SQL不同,MongoDB还在聚合中使用多个阶段。