Mongodb foreach多表关联操作实例

本文介绍如何在MongoDB中使用脚本批量修改旧数据,确保A表与B表关联一致性,尤其在部门名称变更导致数据不匹配时,利用foreach函数进行数据更新,避免使用程序语言,提供实用代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在一次任务中需要批量修改mongodb中的一些旧数据。任务需求是A表之前与B表的关联是通过创建部门来进行文字匹配的这样在一些操作中比如部门名称改变的话就会导致数据不匹配。 为了保证后续数据的一致性与简洁性。就让2表进行关联,但是问题在于A和B表之间是没有主键关联的。而且上面也不允许使用程序语言来解决,必须是用脚本来操作。但是在mobgodb 中关联查询本就是弱项,自己对这方面也没有什么研究。但是任务下来了,没办法只能上了。

 后面再研究mongodb 时,开始是想用lookup来操作的 但是发现这个也只是说可以关联表查询,但是却不能操作,对lookup有兴趣的朋友可以看我的上一个博文https://blog.youkuaiyun.com/HiBoyljw/article/details/86540255

 最后研究了一下发现mongodb中还有一个foreach函数,这是相当于使用脚本的方式对表进行操作。话不多说,直接上代码来看吧

 //在函数中依然可以调用
var param = db.sm_pm_paramconfig.find({
        paramGroup: "BUSINESSUNIT"
    });
//对信息表进行遍历操作
db.userinfo.find().forEach(function(item) {
    var arr = item.address.split("_");
    //获取部门名称
    var deptName = "";
    var num = -1;
    for (var i = 0; i < arr.length; i++) {
        if ("****" == arr[i]) {
            num = i;
            break;
        }
    }
    if (num >= 0) {
        deptName = arr[num + 1];
    } else {
        deptName = "****";
    }
    //插入ID
    //注意:param获取的对象要toarray一下才能遍历。
    var config = param.toArray();
    for (var j = 0, len = config.length; j < len; j++) {
        if (deptName == config[j].paramValue) {
            //插入新字段
            db.userinfo.update({
                "_id": item._id
            }, {
                $set: {
                    "businessUnitId": config[j]._id
                }
            });
            break;
        }
    }
})

mongodb 这种脚本方式就像是在写js语句一样,所以也都很好理解。很多复杂的操作都能通过这种方式来实现。以上就是本文的全部内容,希望对各位有些帮助。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值