--- Business
--- Sub-Business
--- Organization Group
Mongo に保持したいこのようなデータ構造があります。重複するサブビジネスを保持したくありません。また、重複した組織グループを保持したくありません。ビジネスを「_id」として使用しているため、重複はありません。
これらは 2 つのクラスです。persist は 1 つのクラスにあり、他のメソッドは別のクラスにあります。つまり、コードは機能しますが、複数のグループを提供していません。
私は Mongo/Java をよく理解していないため、自分のやりたいことを実行することができません。
これが私が持っているものです
public void persist(Business business) {
DB db = pool.getConnection();
LOG.info("Business toString: " + business.toString()); // REMOVE AFTER
try {
db.requestStart();
DBObject dbObjSetColumns = writeConverter.convert(business);
DBCollection dbCol = db.getCollection(BUSINESS_COLLECTION);
DBObject update = new BasicDBObject("$set",dbObjSetColumns);
DBObject query = new BasicDBObject("_id", business.getName());
LOG.debug(query.toString());
LOG.debug(update.toString());
dbCol.update(query, update, true, false);
} catch (Exception ex) {
throw new RuntimeException(ex);
} finally {
if (db != null) {
db.requestDone();
}
}
}
public DBObject convert(Business business) {
if (business == null) {
return null;
}
final DBObject dbObj = new BasicDBObject();
this.addSubBusinesses(business,dbObj);
return dbObj;
}
private void addSubBusinesses(Business b, DBObject dbObj){
BasicDBObject subBusiness = new BasicDBObject();
for(SubBusiness sub : b.getSubBusinesses()){
subBusiness.put("name", sub.getName());
if(sub.getGroups() != null){
this.addGroupsForSubBusiness(sub, subBusiness);
}
}
dbObj.put("subBusiness", subBusiness);
}
private void addGroupsForSubBusiness(SubBusiness sub, DBObject dbObj){
BasicDBList groups = new BasicDBList();
final DBObject dbGroupObj = new BasicDBObject();
dbGroupObj.put("group", sub.getName());
groups.add(dbGroupObj);
dbObj.put("groups", groups);
}
これが私が受け取っているものです。幸い、サブビジネスが重複しているようには見えませんが、ここには表示されていない複数のグループがあります。
/* 0 */
{
"_id" : "ABC",
"subBusiness" : {
"name" : "subBus",
"groups" : [{
"group" : "Ground"
}]
}
}
/* 1 */
{
"_id" : "XYZ",
"subBusiness" : {
"name" : "Sub2",
"groups" : [{
"group" : "Air"
}]
}
}
これがどのように機能するかを概観すると、
1 つのサブビジネスと 1 つのグループを持つ 1 つのビジネス オブジェクトを永続化します。データベースはすでにビジネス オブジェクトを認識している可能性があります。その場合は、2 回保存しません。同じ論理がサブ ビジネスとグループに適用されます。コレクションは、固有のビジネス情報のみを表示する必要があります。
他に提供できる情報があれば教えてください。私は、この一見簡単なタスクを完了しようとして、丸一日走ってきました。
addSubBusiness メソッドと addGroupForSubBusiness メソッドを除くすべてが既に存在していました。この新しい部分を追加する作業を行っているところなので、ニーズを満たすためにこれをリファクタリングしています。