[MongoDB] MongoDB Java Driver upsert

Woong·2022년 6월 16일
0

Java

목록 보기
10/21

API

  • 본 post 에서는 upsert 에 대한 기본적인 update API만 언급
    • 오버로딩 API 는 API 문서 참조
public WriteResult update(DBObject query,
 DBObject update,
 boolean upsert,
 boolean multi)
  • query : query 에 해당하는 document 에 대해 update 실행
  • update : update 될 ducument 정의
  • upsert : true 일 경우 upsert 로 실행
  • multk : true일 경우 query 에 매칭되는 모든 document에 대해 update, false 일 경우 1개만 실행

샘플 코드

MongoClientURI uri = new MongoClientURI(MONGO_URI);
MongoClient mongoClient = new MongoClient(uri);

DB db = mongoClient.getDB(DB_NAME);
collection =  db.getCollection(COLLECTION_NAME);

//upsert 할 document find 쿼리
BasicDBObject query = new BasicDBObject();
query.put("info.type", "test");
query.put("info.data", "testData");

// upsert 할 document
BasicDBObject updateObject = new BasicDBObject();

// 하위 항목은 별도 BasicDBObject 로 
BasicDBObject updateInfoObject = new BasicDBObject();
updateInfoObject.put("type", "test");
updateInfoObject.put("data", "testDataModified");

// list 는 BasicDBList 로 
BasicDBList originList = new BasicDBList();
originList.add("test_origin");
originList.add("test_origin2");
keyInfoObject.put("origin", originList);


updateObject.put("info", keyInfoObject);


// upsert true, multi true
WriteResult result = collection.update(query, keyObject, true, true);

주의점

  • query Object 에서는 key 에 대해 aa.bb 형식이 가능하지만, update/upsert 할 object 는 aa.bb 형태로 사용할 수 없고 BasicDBOBject 를 별도로 만들어서 put 해주어야한다.
    • 지키지 않으면 java.lang.IllegalArgumentException: Invalid BSON field name info.type 와 같이 에러 발생

reference

0개의 댓글