【mongoDB】 学习(三)java + mongodb 多表联合查询

这篇博客介绍了如何在Java中利用MongoDB的聚合操作$lookup、$project、$match等进行多表(bindings、users、devices)联合查询。详细讲解了查询语句的构建过程,并在Robo 3T 1.3.1中展示了查询结果。同时,文章还探讨了在Java中实现查询语句的方法,包括引入MongoDB包、构造查询语句以及连接数据库和获取collection实例的操作。最后,作者提到了两个遗留问题:时间戳字符串转时间格式和处理前导0的字符串截取。
摘要由CSDN通过智能技术生成

【mongoDB】 学习(三)java + mongodb 多表联合查询

关键字

mongoDB、Java、$lookup、 $project、 $match 等

1、先介绍这次使用的 mongoDB 内的方法以及使用方式(Robo 3T 1.3.1)

mongoDB 官网
https://docs.mongodb.com/manual/reference/operator/aggregation/project/index.html

(1)$lookup

类似SQL server里面的 join

"$lookup": {
    
    "from": "users",//关联目标表名
    "localField": "human",//外键
    "foreignField": "humanSerialNumber", //目标表明内连接字名
    "as": "huamn"//别名
  }
(2)$project

类似SQL server里面 select 后面的内容

"$project" : {
    
        "deviceID" :1,//1=显示字段
        "humanLoc":1,
        "human":"$human",//引入列表
        "time":1,
        "checkFor":"$devices.area",//重命名列 -表devices下的area 列 (类似sql 里面的as)
    }
(3)$match

类似SQL server里面where 后面内容

"$match":{
   
    "origin":"QA",//eq
    "bind":{
   "$regex":"12972247"}//like
    }
(4)$split

字符串切割生成字符数组

{
    "$split": ["$bind", "0000000000"] }
(5)$cond
{
   "$cond":{
   
    "if":{
    
        "$gte": [ {
   "$size":{
    "$split": ["$bind", "0000000000"] }}
                   , 2 
                ]
         }
     ,"then":1
     ,"else":0
  }
}
(6)$arrayElemAt

取列表元素

{
    "$arrayElemAt": ["$devices",0]}

2、表bindings、users、devices 三表连表查询

(1)表 bindings–二维码绑定记录表
{
   
    "_id" : ObjectId("5c99d700d360a612e21cccba"),
    "qrcode" : "66E88CFEFB964D074290160E2F",
    "bind" : "000000000010126460",
    "device_info" : "X888D77S6||10126460",
    "device_name" : "电动车:0.4t",
    "detail" : "设备号: 10126460\n序列号: X888D77S6\n设备类型:CS0001 电动车:1.4t\n送达方客户名: 服务组001\n设备状态: 在客户处 [CUST]",
    "human" : "82306690787299121764776791679022450814",
    "humanLoc" : "121.610741,31.185281,上海市浦东新区张江高科技园区,上海市浦东新区张江高科技园区,上海市浦东新区张江高科技园区",
    "origin" : "QA",
    "timestamp" : "1553585920323",
    "area_code" : "6053"
}
(2)表 devices–设备表
{
   
    "_id" : ObjectId("5e96a93749b0833d2ad1b211"),
    "bindingSerial" : "[X888D77S6] [11313212]",
    "origin" : "QA",
    "deviceID" : "11313212",
    "bindContent" : [ 
        {
   
            "name" : "电动车:0.4t",
            "bindFlag" : "11313212",
            "bindValues" : [ 
                {
   
                    "fieldName" : "设备号",
                    "fieldValue" : "11313212"
                }, 
                {
   
                    "fieldName" : "序列号",
                    "fieldValue" : "G74104-001"
                }, 
                {
   
                    "fieldName" : "设备类型",
                    "fieldValue" : "CS0040"
                }, 
                {
   
                    "fieldName" : "设备状态",
                    "fieldValue" : "在客户处 [CUST]"
                }, 
                {
   
                    "fieldName" : "销售组",
                    "fieldValue" : "CTZ"
                }, 
                {
   
                    "fieldName" : "设备属性",
                    "fieldValue" : "R"
                }
            ]
        }
    ],
    "area" : 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值