Jawaban:
Untuk menghindari transmisi dari Object
ke ObjectId
, dengan a com.mongodb.client.MongoCollection collection
dan a org.bson.Document doc
, Anda dapat melakukan hal berikut:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
Aman untuk dilakukan
doc.set("_id", new ObjectId())
jika Anda melihat kode driver
if ( ensureID && id == null ){
id = ObjectId.get();
jo.put( "_id" , id );
}
public static ObjectId get(){
return new ObjectId();
}
it's save to do
atau it's safe to do
?
Di MongoTemplate.class memiliki metode
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));
}
dan metode akan menetapkan id untuk kita
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);
}
kita dapat melihat apakah entitas tersebut adalah sub-kelas dari BasicDBObject, itu akan menetapkan id untuk kita.
Saya pikir jawabannya adalah "Tidak".
Apa yang dapat Anda lakukan adalah menyediakan _id
diri Anda, baik secara manual, atau menerapkan CollectibleCodec
mekanisme (yang persis seperti BasicBDDocument
itu). Namun semua solusi ini melibatkan pembuatan ID di sisi klien.
Karena itu, saya tidak berpikir ada masalah dengan menghasilkan sisi _id
klien.
Ini adalah operasi penyisipan:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Setelah memasukkan Anda mendapatkan id yang terakhir dimasukkan:
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);
setelah mendapatkan nilai convert ke inter type.