通过Pymongo如何多表关联查询数据?

MongoDB数据库多表查询数据

之前在Robo 3T里通过 $lookup可以把2个表关联

相关代码

db.users.aggregate([
{    $match : 
    { regDate : { "$gte" : ISODate("2018-05-01T00:00:00Z"), "$lt" : ISODate("2018-05-31T00:00:00Z") } }
},
{
    $project :
    {    
        '_id':1,
        'regDate':1,
        'totalRecharge':1,
        'jcode':1
    }
},
{
$lookup:
    {
        "from":"recharge",
        "localField":"_id",
        "foreignField":"uid",
        "as":"recharge"
    }
},
{ $match : {"recharge.from" : "weixin"}},
{ $match : {"recharge.from" : "alipay"}},
{ $match : {"recharge.rechargeDate" : {"$gte" : ISODate("2018-05-01T00:00:00Z"), "$lt":ISODate("2018-05-31T00:00:00Z")}}},

])

users是用户表,recharge是充值表,用户表里没有充值金额(real)以及充值日期(rechargeDate),充值表里没有用户注册时间。

想查询哪些是充值用户和在时间范围内(注册1周、3周等)之内哪些充值过。

阅读 8.2k
2 个回答

最简单的办法是把用户注册信息冗余到充值记录里面,根本就不用$lookup了,性能可以提高很多。毕竟注册时间又不会变。

这个要求本身就有些强人所难,非关系型数据库对多表查询这种复杂的查询方式都是乏善可陈的,也要尽量避免这种查询方式,建议与 ES 配合使用,或者将查询结果缓存。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题