জাভা ড্রাইভারটি ব্যবহার করে কোনও মঙ্গোডিবি ইভেন্টের সর্বশেষ সন্নিবেশকৃত নথির আইডি (অবজেক্টআইডি) পাওয়ার কী সহজ উপায় আছে?
জাভা ড্রাইভারটি ব্যবহার করে কোনও মঙ্গোডিবি ইভেন্টের সর্বশেষ সন্নিবেশকৃত নথির আইডি (অবজেক্টআইডি) পাওয়ার কী সহজ উপায় আছে?
উত্তর:
আমি বুঝতে পেরেছি আপনি এটি করতে পারেন:
BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = (ObjectId)doc.get( "_id" );
ক এবং একটি দেওয়া থেকে কাস্টিং এড়ানোর Object
জন্য , আপনি নিম্নলিখিতগুলি করতে পারেন:ObjectId
com.mongodb.client.MongoCollection collection
org.bson.Document doc
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
এটি করা নিরাপদ
doc.set("_id", new ObjectId())
আপনি যদি ড্রাইভার কোড তাকান
if ( ensureID && id == null ){
id = ObjectId.get();
jo.put( "_id" , id );
}
public static ObjectId get(){
return new ObjectId();
}
it's save to do
নাকি it's safe to do
?
মঙ্গোমেম্পলেট.ক্লাসে একটি পদ্ধতি আছে
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));
}
এবং পদ্ধতিটি আমাদের জন্য আইডি সেট করবে
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);
}
আমরা দেখতে পাচ্ছি যে সত্তাটি বেসিকডিবিঅজেক্টের একটি উপ-শ্রেণি, এটি আমাদের জন্য একটি আইডি সেট করবে।
আমি মনে করি এর উত্তরটি "না"।
আপনি যা করতে পারেন তা হ'ল _id
ম্যানুয়ালি আপনার নিজের সরবরাহ করা, বা CollectibleCodec
প্রক্রিয়াটি বাস্তবায়ন করা (যা হুবহু ঠিক তাই BasicBDDocument
করে)। তবে এই সমস্ত সমাধান আইডি ক্লায়েন্টাইড উত্পন্ন জড়িত।
এটি বলে, আমি মনে করি না যে _id
ক্লায়েন্টাইড উত্পন্ন করতে কোনও সমস্যা আছে ।
এটি sertোকানো অপারেশন:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Sertোকানোর পরে আপনি সর্বশেষ idোকানো আইডি পান:
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);
মানটি ইন্টার টাইপে রূপান্তরিত হওয়ার পরে।