mongoDB修改数据

//定时任务

public void updateMongoDbOldData() {

        final MongoCollection<Document> coll = MongoDBUtil.getCollection();
        int num = ConstantNumber.FIVE_THOUSAND;// 5000
        // 默认20次循环=分页
        for (int i = 0; i < ConstantNumber.NUM_TWENTY.intValue(); i++) {
            // 根据ID顺序排序
            FindIterable<Document> iterable = coll.find()
                    .sort(new BasicDBObject("_id", 1));
            logger.info("updateMongoDbOldData_i:" + i);
            // 限制一次性取5000
            iterable.limit(num).skip(i * num).forEach(new Block<Document>() {
                public void apply(final Document document) {
                    if (null == document) {
                        logger.info(
                                "updateMongoDbOldData_apply document is null");
                    } else {
                        // 长度为13位,表示是老数据
                        if (13 == document.size()) {
                            String isliCode = document.getString("isliCode");
                            if (StringUtils.isNotBlank(isliCode)
                                    && isliCode.length() > 20) {
                                updateMongoDbByIsliCode(coll, isliCode);
                            }
                        } else {
                            logger.info("updateMongoDbOldData_document.size:"
                                    + document.size());
                        }
                    }
                }
            });
        }
    }


    /**
     * 更新MongoDb老数据,增加publisherId和serviceProviderId两个字段
     * @Description: TODO
     * @param coll
     * @param id
     * @param isliCode
     *
     * Author: wujianh
     * Date: 2017年11月21日 下午4:35:43
     * Version: 1.0
     */
    private void updateMongoDbByIsliCode(MongoCollection<Document> coll,
            String isliCode) {
        logger.info("updateMongoDbByIsliCode_isliCode:" + isliCode);
        try {
            Bson filter = Filters.eq("isliCode", isliCode);
            Document newDoc = new Document();
            StatisIsliCode statisIsliCode = getInfoByIsliCode(isliCode);
            if (null != statisIsliCode) {
                String publisherId = statisIsliCode.getPublisherId();
                String serviceProviderId = statisIsliCode
                        .getServiceProviderId();
                if (StringUtils.isNotBlank(publisherId)) {
                    newDoc.put("publisherId", publisherId);
                } else {
                    newDoc.put("publisherId", "");
                }
                if (StringUtils.isNotBlank(serviceProviderId)) {
                    newDoc.put("serviceProviderId", serviceProviderId);
                } else {
                    newDoc.put("serviceProviderId", "");
                }
                // 新增加两个字段
                coll.updateMany(filter, new Document("$set", newDoc));
                logger.info("updateMongoDbByIsliCode_success:" + isliCode);
            }
        } catch (Exception e) {
            logger.error("updateMongoDbByIsliCode", e);
        }

    }



参考:

https://www.cnblogs.com/tomcatx/p/4245697.html

https://www.cnblogs.com/zhoulf/p/4571647.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值