Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
* _uri및 ct에 like검색을 수행하여 리턴되는 결과값 중에서 con의 값을 string->interger로 casting한후 원래의 _id를 key로 하여
update하는 java소스 코드이다.(주의할점은 아래의 예제는 makeStringMap를 이용하여 모든 값을 String으로 변경되므로 숫자등의 속성이 유지 되어야 하는 값은 적절하게 변환하여 주어야 한다)
// MongoDB연결
try {
mongoClient = new MongoClient(new ServerAddress(db_server, Integer.parseInt(db_port)));
db = mongoClient.getDB(db_name);
table = db.getCollection(collection_name);
} catch (Exception ex) {
log.debug("MongoDB connection error : "+ex.getMessage());
if(db != null) {
db.cleanCursors(true);
db = null;
}
if(table != null) {table = null;}
if(mongoClient != null ) {
mongoClient.close();
}
throw ex;
}
// con값에 대한 형변환(String -> Integer)
// 형변환(shell 코드)
/* db.resource.find (
{"_uri": /TicketCount/status/CONTENT_INST/, "ct": /20161213/}
)
.forEach(function(x) {
x.con = new NumberInt(x.con);
db.resource.save(x) })
*/
DBObject searchCastQuery = new BasicDBObject(); //"$match", new BasicDBObject("ct", new BasicDBObject("$gte", "20161213T160000")));
searchCastQuery.put("_uri", new BasicDBObject("$regex", "TicketCount/status/CONTENT_INST"));
//searchCastQuery.put("ct", new BasicDBObject("$regex", "20161213"));
searchCastQuery.put("ct", new BasicDBObject("$regex", Utils.sysdateFormat.format(new Date())));
DBCursor cursor = table.find(searchCastQuery);
while (cursor.hasNext()) {
DBObject oldObj = cursor.next();
@SuppressWarnings("unchecked")
Map<String, String> map = makeStringMap(oldObj.toMap());
//map.put("_id", new ObjectId(map.get("_id")));
ObjectId id = new ObjectId(map.get("_id"));
BasicDBObject newObj = new BasicDBObject(map);
newObj.append("_id", id);
newObj.append("con", Integer.parseInt(map.get("con")));
newObj.append("ty", Integer.parseInt(map.get("ty")));
newObj.append("st", Integer.parseInt(map.get("st")));
newObj.append("cs", Integer.parseInt(map.get("cs")));
String lbl_tmp = map.get("lbl");
Gson gson = new Gson();
String[] lbl_json = gson.fromJson(lbl_tmp ,String[].class);
newObj.append("lbl", lbl_json);
BasicDBObject updateObj = new BasicDBObject();
updateObj.put("$set", newObj);
table.update(oldObj, updateObj);
}
makeStringMap함수
public Map<String,String> makeStringMap(Map<String, String> map) {
Map<String, String> newMap = new HashMap<String, String>();
Set<String> entry = map.keySet();
Iterator<String> itr = entry.iterator();
while(itr.hasNext()) {
String key = String.valueOf(itr.next());
//System.out.println("key : "+key);
String value = String.valueOf(map.get(key));
//System.out.println("value : "+value);
newMap.put(key, value);
}
return newMap;
}댓글 0
| 번호 | 제목 | 날짜 | 조회 수 |
|---|---|---|---|
| 8 | [JSON 파싱]mongodb의 document를 GSON을 이용하여 parsing할때 ObjectId값에서 오류 발생시 조치방법 | 2017.01.18 | 5555 |
| 7 | like검색한 결과를 기준으로 집계를 수행하는 java 소스 | 2016.12.19 | 4281 |
| » | MongoDB에 있는 특정컬럼의 값을 casting(string->integer)하여 update하기 java 소스 | 2016.12.19 | 5171 |
| 5 | mongodb aggregation query를 Java code로 변환한 샘플 | 2016.12.15 | 4646 |
| 4 | mongodb에서 큰데이타 sort시 오류발생에 대한 해결방법 | 2015.12.22 | 5114 |
| 3 | console명령과 API비교 | 2015.12.21 | 4832 |
| 2 | SQL문장과 Mongo에서 사용하는 명령어를 비교한 것입니다. | 2015.09.30 | 4223 |
| 1 | mongodb 2.6.6 설치(64bit) | 2015.09.30 | 2723 |