MongoDB 管道函数aggregate使用记录

一、多集合关联更新数据

//新增字段
//新建集合

db.createCollection('workjsoninfo8');


//把新集合数据更新进旧集合

db.workjsoninfo8.find({});

//管道函数查数据/刷新数据

db.workjsoninfo8.aggregate(
    [
        {
            $lookup:{
                from:"workjsoninfo",//要查询的集合
                localField:"WorkOrderId",//localField是当前集合的字段
                foreignField:"WorkOrderId",//foreignField是要查询集合的字段,这两个字段应该是类型和数据相同的。
                as:'WorkOrder'//保存查询结果的字段名。
            }
        }
    ,
		{$match:{WorkOrder:{$ne:[]},"WorkOrder.WorkAddressInfo":null}}//筛选结果字段不为空(关联到)
		, 
		{$project:{WorkOrderId:1,workaddressinfo:1}} //展示WorkOrderId和WorkOrder.workaddressinfo
	//, {$count:"num"} //137486
]).
forEach(function(item){
 db.workjsoninfo.update({WorkOrderId:item.WorkOrderId,WorkAddressInfo:null},{$set:{WorkAddressInfo:item.workaddressinfo}})
});


//刷新数据

//数据量过大时会报错 cusor id not found
/*主要原因:
默认 mongo server维护连接的时间窗口是十分钟

默认 单次从 server获取数据是101条或者 大于1M小于16M的数据

所以默认情况下,如果10分钟内未能处理完数据,则抛出该异常

batchSize有用,但不完全有用*/

db.workjsoninfo8.find({}).forEach(

 function(item){
    db.workjsoninfo.updateMany(

        {WorkOrderId:item.WorkOrderId },

       {$set:{WorkAddressInfo:item.workaddressinfo}}

   )
 }

);


//刷为数组
 

db.workjsoninfo.find(

     {'WorkAddressInfo.Id':null,WorkAddressInfo:{$ne:null}}

).forEach(function (el){

     el.WorkAddressInfo=JSON.parse(el.WorkAddressInfo);

     db.workjsoninfo.save(el)

});


//统计更新后地址数据

db.workjsoninfo.aggregate(
[
 {
  $group:{
             _id:{WorkAddressInfo:"$WorkAddressInfo"},//根据WorkAddressInfo分组
                     count:{$sum:1}
  }
 }
]);

db.workjsoninfo.find({'WorkAddressInfo.Id':null,WorkAddressInfo:{$ne:null}}).count();//有多少条WorkAddressInfo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值