public class DiffStrategy extends UpdateStrategy {
@Override
public void update(DBObject initialValue, DBObject updatedValue, DBCollection collection) {
final DBObject diff = new DbObjectDiff(initialValue).compareWith(updatedValue);
if (!diff.keySet().isEmpty()) {
final DBObject q = updateQuery(initialValue);
final DBObject pull = (DBObject) diff.get(DbObjectDiff.Modifier.PULL.toString());
diff.removeField(DbObjectDiff.Modifier.PULL.toString());
LOGGER.debug("Updating : collection {} : query {} : modifiers : {}", collection.getName(), q, diff);
collection.update(q, diff);