package com.sissi.ucenter.relation.muc.apply.register; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DBObject; import com.mongodb.MongoException; import com.mongodb.WriteConcern; import com.sissi.config.Dictionary; import com.sissi.config.MongoConfig; import com.sissi.context.JID; import com.sissi.field.Fields; import com.sissi.ucenter.impl.MongoFieldsContext; import com.sissi.ucenter.relation.muc.apply.ApplyContext; /** * 更新个人信息请求(Information). 索引策略1: {"jid":1}</p>索引策略2: {"jid":1,"informations.jid":1} * * @author kim 2014年3月12日 */ public class MongoRegisterSubmitContext extends MongoFieldsContext implements ApplyContext { private final MongoConfig config; public MongoRegisterSubmitContext(MongoConfig config) { super(); this.config = config; } /* * 全量更新 * * @see com.sissi.ucenter.relation.muc.request.RequestContext#request(com.sissi.context.JID, com.sissi.context.JID, com.sissi.field.Fields) */ @Override public boolean apply(JID invoker, JID group, Fields fields) { DBObject entity = super.entities(fields, BasicDBObjectBuilder.start()); try { // {"jid":to.bare,"informations.jid":from.bare},{"$set":{"infomrations.$.information":..entity..}} this.config.collection().update(BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, group.asStringWithBare()).add(Dictionary.FIELD_INFORMATIONS + "." + Dictionary.FIELD_JID, invoker.asStringWithBare()).get(), BasicDBObjectBuilder.start("$set", BasicDBObjectBuilder.start(Dictionary.FIELD_INFORMATIONS + ".$." + Dictionary.FIELD_INFORMATION, entity).get()).get(), true, false, WriteConcern.SAFE); } catch (MongoException e) { // {"jid":to.bare},{"$addToSet"{"informations":{"jid":from.bare,"activate":当前时间,"information":...entity...}}} this.config.collection().update(BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, group.asStringWithBare()).get(), BasicDBObjectBuilder.start().add("$addToSet", BasicDBObjectBuilder.start(Dictionary.FIELD_INFORMATIONS, BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, invoker.asStringWithBare()).add(Dictionary.FIELD_ACTIVATE, System.currentTimeMillis()).add(Dictionary.FIELD_INFORMATION, entity).get()).get()).get()); } return true; } }