code: public Object copy() {
          // copy field values into new object
          BasicDBObject newCopy = new BasicDBObject(this.toMap());
          // need to clone the sub obj
          for (final String field : keySet()) {
              Object val = get(field);
              if (val instanceof BasicDBObject) {
                  newCopy.put(field, ((BasicDBObject) val).copy());
              } else if (val instanceof BasicDBList) {
                  newCopy.put(field, ((BasicDBList) val).copy());
              }
          }
          return newCopy;
      }
docs: Creates a new instance which is a copy of this BasicDBObject.
  
  @return a BasicDBObject with exactly the same values as this instance.