क्या जावा ड्राइवर का उपयोग करके एक मोंगोडीबी उदाहरण के अंतिम सम्मिलित दस्तावेज़ की आईडी (ऑब्जेक्ट) प्राप्त करने का एक आसान तरीका है?
क्या जावा ड्राइवर का उपयोग करके एक मोंगोडीबी उदाहरण के अंतिम सम्मिलित दस्तावेज़ की आईडी (ऑब्जेक्ट) प्राप्त करने का एक आसान तरीका है?
जवाबों:
मुझे सिर्फ एहसास हुआ कि आप ऐसा कर सकते हैं:
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
?
MongoTemplate.class में एक विधि है
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);
}
हम देख सकते हैं कि क्या इकाई BasicDBObject का उप-वर्ग है, यह हमारे लिए एक आईडी सेट करेगा।
मुझे लगता है कि इसका उत्तर "नहीं" है।
आप जो कर सकते हैं _id
, वह स्वयं को प्रदान करें , या तो मैन्युअल रूप से करें, या CollectibleCodec
तंत्र को लागू करें (जो वास्तव में यही BasicBDDocument
करता है)। हालाँकि इन सभी समाधानों में आईडी क्लाइंटसाइड बनाना शामिल है।
ऐसा कहने के बाद, मुझे नहीं लगता कि _id
क्लाइंटसाइड बनाने में कोई समस्या है ।
यह सम्मिलित ऑपरेशन है:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
डालने के बाद अंतिम सम्मिलित आईडी प्राप्त करें:
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);
मान प्राप्त करने के बाद अंतर प्रकार में परिवर्तित करें।