场景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
浙公网安备 33010602011771号