/** * Encodes a {@code BSONObject}. This is for the higher level api calls. * * @param document the document to encode * @return the number of characters in the encoding */ @Override public int putObject(final BSONObject document) { int startPosition = getOutputBuffer().getPosition(); bsonWriter.writeStartDocument(); if (isTopLevelDocument() && document.containsField("_id")) { _putObjectField("_id", document.get("_id")); } for (final String key : document.keySet()) { if (isTopLevelDocument() && key.equals("_id")) { continue; } _putObjectField(key, document.get(key)); } bsonWriter.writeEndDocument(); return getOutputBuffer().getPosition() - startPosition; }