public void write(AssignFieldPathUpdate update) { write((FieldPathUpdate)update); byte flags = 0; if (update.getRemoveIfZero()) { flags |= AssignFieldPathUpdate.REMOVE_IF_ZERO; } if (update.getCreateMissingPath()) { flags |= AssignFieldPathUpdate.CREATE_MISSING_PATH; } if (update.isArithmetic()) { flags |= AssignFieldPathUpdate.ARITHMETIC_EXPRESSION; putByte(null, flags); put(null, update.getExpression()); } else { putByte(null, flags); update.getFieldValue().serialize(this); } }
public static void applyUpdate(FieldPathUpdate update, Document doc) { if (update instanceof AddFieldPathUpdate) { update.applyTo(doc); } else if (update instanceof AssignFieldPathUpdate) { AssignFieldPathUpdate assign = (AssignFieldPathUpdate)update; boolean createMissingPath = assign.getCreateMissingPath(); boolean removeIfZero = assign.getRemoveIfZero(); assign.setCreateMissingPath(true); assign.setRemoveIfZero(false); assign.applyTo(doc); assign.setCreateMissingPath(createMissingPath); assign.setRemoveIfZero(removeIfZero); } else if (update instanceof RemoveFieldPathUpdate) { doc.iterateNested(update.getFieldPath(), 0, new MyHandler()); } }