场景1:根据用户分组,查询相同的用户下,同时包含多个角色

 

db.getCollection('Sys_RT_Rel_Role_User').aggregate([
  
  {$group:
    {
      _id: "$USER_CD", // 根据什么字段分组
	  "ROLE_CD": {"$push": "$ROLE_CD"},  //根据USER_CD分组,然后把ROLE_CD放进列表里
      count: {$sum:1} 
    }
  },
	{$match: 
      {"ROLE_CD": {$all: ["GATE_ROLE_DF_FILL","GATE_ROLE_DF_CITY_MANAGER"]}}  //根据上面放进列表的ROLE_CD,查询同时包含多个角色
  },
])

  

当match在group之前类似于SQL的where操作,在group之后类似于SQL的having操作

 

场景2:根据两个字段分组查询重复的

db.getCollection('Sys_RT_Rel_Role_User').aggregate([
    {
        $group: {
            _id: {
                role_cd: '$ROLE_CD',
                user_cd: '$USER_CD'
	      },
	      count: {
		    $sum: 1
	      }
        }
    },
    {
        $match: {
            count: {
                $gt: 1
            }
        }
    }
])

  

 

场景3:替换某个字段(ADDVCD)指定字符串,将0000——>替换为0100

db.getCollection("Sys_RT_Unit").find({"DZ_INIT_FLAG":"0"}).forEach(//循环获取目标数据 
function(item) {
    var message = item['ADDVCD'];
    message = message.replace(/0000/g, '0100'); //目标字符串替换,/g 标识全局变量直接解决raplaceAll不支持方案,可以替换多个串 
    db.getCollection('Sys_RT_Unit').updateOne({
        "_id": item['_id']
    }, {
        $set: {
            "ADDVCD": message
        }
    }); //修改目标字段,完成替换 
});

  

 场景4:查询字段以某字符串开头的文档

db.getCollection("Sys_RT_User").find({ DATA_SOURCE :  /^UNION_IMPORT_/ }).count()    
//查询DATA_SOURCE字段以UNION_IMPORT开头的所有文档数量

  

 

 场景5:根据一个集合的字段,更新另一个集合的字段

var cursor = db.getCollection('LANZHENG_EXISTS').find();
cursor.forEach(
    function(item){
        db.getCollection("Sys_RT_User").update({PHONE:item.PHONE},{$set:{LANZHENG_EXISTS_FLAG:'1'}},true)
    }
)

源集合:LANZHENG_EXISTS

目标集合:Sys_RT_User 的LANZHENG_EXISTS_FLAG字段

根据手机号相等

 

 posted on 2023-12-06 09:47  布鲁布鲁sky  阅读(4)  评论(0编辑  收藏  举报