mongodb个人汇总

一、

1、批数据处理

1.1 分批查询

1 mongdb查询count 数量极快!
2 limit分批查询禁止使用分页,应使用比较id查询

/*
	 * 查询mongodb中已经存在的指定SourceType的药品列表list
	 * 
	 */
	public Map<Long, String> getCurrentErpMedicineMap() throws Exception {
		
		DocDB mongo = DocDB.mongo(PlatformType.HIS.domain());
		Document query = new Document();
		query.append("SourceType", PlatformType.ERP.getValue());

		// count
		int count = mongo.mongoCount(SyncShopMedicineEntity.class, query);
		if (count == 0)
			return null;
		
		int size = 16;
		int sizeTemp = (int) (count/ 0.75 + 1);
		size = size > sizeTemp ? size : sizeTemp;
		Map<Long, String> result = new HashMap<>(size);
		
		int limit = 20000;
		List<Map<String, Object>>  list = null;
		Long curMaxId = 0L;
		int curCount = 0;
		Map<String, String> includeFieldAlias = new HashMap<>();
		includeFieldAlias.put("SourceId", "SourceId");
		includeFieldAlias.put("CatalogCode", "CatalogCode");
		while(curCount < count){
			// 比较id查询
			list = mongo.mongoQueryRows(SyncShopMedicineEntity.class, query.append("_id", new Document("$gt",curMaxId)),includeFieldAlias, null, 0, limit);
			if(list!=null&&!list.isEmpty()){
				curMaxId = ObjectTransfer.longValue(list.get(list.size()-1).get("_id"));
				for (Map<String, Object> map : list) {
					Long key = ObjectTransfer.longValue(map.get("SourceId"));
					String value = ObjectTransfer.stringValue(map.get("CatalogCode"));
					if(key==null||value==null||key.longValue()==0||value.isEmpty())
						continue;
					result.put(key, value);
				}
			}	
			curCount+=limit;
		}
		return result;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值