我有2个表:用户和付款。 我想过滤上个月注册的非活动用户的付款。 SQL等价物: 从付款中选择* 内部联接用户u在u.id = payments.user_id上 其中u.active = 0且日期>现在() - 30 * 24 * 60 * 60。
问题是mongo不支持连接。 我必须首先查询用户然后使用user_id {$ in:...}付款 表很大而且很慢。
现在假设付款有product_id,我有大产品表,必须添加一些产品过滤器。 产品有类别。 如果对于每个过滤器,我必须添加另一个查询,不仅速度很差,而且代码变得庞大而且混乱。
还有其他好办法吗? 感谢
答案 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:[]}}}
])