API
- 본 post 에서는 upsert 에 대한 기본적인 update 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