mongo多表查询


这里主要是说##$lookuplookup就是使用aggregate的$lookup属性

user表

{ "_id" : 1, "cgNo" : "1","type":"1"}
{ "_id" : 2, "cgNo" : "2", type: "2"}
{ "_id" : 3  "cgNo" : "3" type: "3"}

ordersitem 表

{ "_id" : 1, "cgNo" : "1"

"operTraceDeque" : [  //这个是模拟轨迹表
            {
                "procDate" : "",
                "procStat" : ""

            }, 

{
         
                "procDate" : "",
                "procStat" : ""

            }, 

]

}

##$lookuplookup作为内嵌试用是比较耗费时间的 我们应该尽力避免使用,数据量比较大的情况下经常会导致查询失败

因本人也是初学 所以以博客的形式记录下最近的使用心得

上面俩张表如果需要查询

ordersitem中operTraceDeque 当查询条件为user表中的type的时候

var parr4 = db.user.distinct("cgNo",{"type":"1"});  这句的主要作用是查询出自己所有的数据 以及字段 减少$lookuplookup所需要关联的数据
 var date = db.ordersitem.aggregate([
   {
      $match: {
       'cgNo':{$in: parr4},      //根据上面筛选后的条件做出查询
        }
     },

// 数据量比较大的情况还是建议使用下面这俩句话做分页查询的

//   { "$skip": 0},                 //跳过多少条试用   

  //  { "$limit": 2000},             //查询前多少条数据

 {
    $lookup: {              //关联表 获取另外一张表的数据
      from: "user",
      localField: "cgNo",
      foreignField: "cgNo",
      as: "user"
    }
  },
 //因下面date.toArray() 有字数限制 这边建议只取自己需要的数据
     { $project : {     //是否显示 1 表示显示字段   0表示不显示
                      "cgNo":1,
                    "operTraceDeque" : 1,
         
          } 
       },
  ])
print(date.toArray());   //转成数据显示

var parr4 = db.user.distinct("cgNo",{"type":"1"});  这句的主要作用是查询出自己所有的数据 以及字段 减少$lookuplookup所需要关联的数据
 var date = db.ordersitem.aggregate([
   {
      $match: {
       'cgNo':{$in: parr4},      //根据上面筛选后的条件做出查询
        }
     },

// 数据量比较大的情况还是建议使用下面这俩句话做分页查询的

//   { "$skip": 0},                 //跳过多少条试用   

  //  { "$limit": 2000},             //查询前多少条数据

 {
    $lookup: {              //关联表 获取另外一张表的数据
      from: "user",
      localField: "cgNo",
      foreignField: "cgNo",
      as: "user"
    }
  },
 //因下面date.toArray() 有字数限制 这边建议只取自己需要的数据
     { $project : {     //是否显示 1 表示显示字段   0表示不显示
                      "cgNo":1,
                    "operTraceDeque" : 1,
         
          } 
       },
  ])
print(date.toArray());   //转成数据显示


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值