Respuestas:
Para evitar la transmisión de Object
a ObjectId
, dados a com.mongodb.client.MongoCollection collection
y a org.bson.Document doc
, puedes hacer lo siguiente:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
Es seguro hacerlo
doc.set("_id", new ObjectId())
si miras el código del conductor
if ( ensureID && id == null ){
id = ObjectId.get();
jo.put( "_id" , id );
}
public static ObjectId get(){
return new ObjectId();
}
it's save to do
o it's safe to do
?
En MongoTemplate.class tiene un método
protected <T> void doInsert(String collectionName, T objectToSave, MongoWriter<T> writer) {
assertUpdateableIdIfNotSet(objectToSave);
initializeVersionProperty(objectToSave);
maybeEmitEvent(new BeforeConvertEvent<T>(objectToSave, collectionName));
DBObject dbDoc = toDbObject(objectToSave, writer);
maybeEmitEvent(new BeforeSaveEvent<T>(objectToSave, dbDoc, collectionName));
Object id = insertDBObject(collectionName, dbDoc, objectToSave.getClass());
populateIdIfNecessary(objectToSave, id);
maybeEmitEvent(new AfterSaveEvent<T>(objectToSave, dbDoc, collectionName));
}
y el método establecerá la identificación para nosotros
protected void populateIdIfNecessary(Object savedObject, Object id) {
if (id == null) {
return;
}
if (savedObject instanceof BasicDBObject) {
DBObject dbObject = (DBObject) savedObject;
dbObject.put(ID_FIELD, id);
return;
}
MongoPersistentProperty idProp = getIdPropertyFor(savedObject.getClass());
if (idProp == null) {
return;
}
ConversionService conversionService = mongoConverter.getConversionService();
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(savedObject.getClass());
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject);
if (accessor.getProperty(idProp) != null) {
return;
}
new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, id);
}
podemos ver si la entidad es una subclase de BasicDBObject, establecerá una identificación para nosotros.
Creo que la respuesta a esto es "No".
Lo que puede hacer es proporcionarse usted _id
mismo, ya sea manualmente o implementar el CollectibleCodec
mecanismo (que es exactamente lo queBasicBDDocument
hace). Sin embargo, todas estas soluciones implican generar el ID del lado del cliente.
Habiendo dicho eso, no creo que haya ningún problema con generar el lado del _id
cliente.
Esta es la operación de inserción:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Después de insertar, obtienes la última identificación insertada:
DBCollection tableDetails = db.getCollection("collection name");
BasicDBObject queryDetails = new BasicDBObject();
queryDetails.put("_id", value);
DBCursor cursorDetails =tableDetails.find(queryDetails);
DBObject oneDetails;
oneDetails=cursorDetails.next();
String data=oneDetails.get("_id").toString();
System.out.println(data);
después de obtener el valor, convertir a tipo inter.