• 技术文章 >数据库 >MongoDB

    mongoDB如何实现关联查询?

     Ly Ly2020-05-20 13:28:51原创2453

    需求:把订单表(PrepurchaseOrder)和用户表(User)通过邮箱(emaiL)进行关联,查找订单用户对应的钱包地址。

    订单表结构如下:

    { 
        "email" : "haifeng@163.com", 
        "productName" : "中型2GPU矿机", 
    }

    用户表结构如下:

    { 
        "email" : "15077550@qq.com", 
        "neoWalletAddress" : "aabbccdd", 
    }

    最终的sql如下:

    db['PrepurchaseOrder'].aggregate([{
    $lookup:{
    from:"User",
    localField:"email",
    foreignField: "email",
    as: "Users"
    }},
    { $unwind: "$Users" },
    { $match : { "Users.neoWalletAddress" : {$exists:true} }},
    { $project: { productName: 1,count:1,email:1,"Users.neoWalletAddress":1}},
    ])

    sql解析:

    1.from:"User" 表示从User表中去查

    2.localField:"email",表示订单表(PrepurchaseOrder)中的邮箱。

    3.foreignField: "email",表示用户表(User)中的邮箱。

    4.as: "Users",表示把从User表中查询出的内容作为一个Users变量,附加到订单表(PrepurchaseOrder)

    5.{ $unwind: "$Users" },表示把从User表中查询的数据字段,作为订单表(PrepurchaseOrder)中的字段

    6. $match,表示进行值的匹配,匹配User表中钱包地址不为null的。

    7. $project,表示指定显示哪些字段。

    最终导出的数据如下图:

    p1.jpg

    专题推荐:mongodb
    品易云
    上一篇:mongoDB如何实现关联查询? 下一篇:如何验证mongodb是否启动?

    相关文章推荐

    • mongodb怎么删除所有为空的字段• mongodb判断是否为空?• mongodb命令行使用快捷键无法粘贴怎么办?• mongodb命令行中怎么换行?• mongodb启动成功什么标志• mongodb适用于存储日志吗?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网