Có cách nào dễ dàng để lấy ID (ObjectID) của tài liệu được chèn vào cuối cùng của cá thể mongoDB bằng trình điều khiển Java không?Lấy ID của tài liệu được chèn vào cuối cùng trong một mongoDB w/Trình điều khiển Java
Trả lời
Hate để trả lời câu hỏi của riêng tôi, nhưng tôi chỉ nhận ra bạn có thể làm điều này:
BasicDBObject doc = new BasicDBObject("name", "Matt");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");
Tôi không biết về trình điều khiển Java nhưng cho hậu thế, lệnh GetLastError có thể được chạy để có được những _id của một ghi, thậm chí là một upsert (như 1.5.4)
Sau khi một tài liệu được chèn vào bộ sưu tập MongoDB, việc chèn thành công sẽ cập nhật các trường bắt buộc (viz. _id). Bạn có thể truy vấn đối tượng được chèn cho _id.
Đó là an toàn để làm
doc.set("_id", new ObjectId())
nếu quý vị nhìn vào mã trình điều khiển
if (ensureID && id == null){
id = ObjectId.get();
jo.put("_id" , id);
}
public static ObjectId get(){
return new ObjectId();
}
có phải bạn muốn nói 'nó tiết kiệm để làm' hoặc' an toàn để làm'? – pd40
Vì một số lý do, trong MongoDB 2.2.2 (trái ngược với trước đó khi tôi ở trên 2.2.0) và với trình điều khiển Java 2.10.1, mã trong câu trả lời không hoạt động; sau khi tôi đưa đối tượng vào tài liệu, tôi dường như không thể nhận được _id của nó, mặc dù MongoDB tự động tạo ra ObjectId một cách rõ ràng. Tuy nhiên, giải pháp của bạn bằng tay tạo ObjectId không hoạt động, và cảm ơn cho tùy chọn này! –
BasicDBObject doc = new BasicDBObject("_id", new ObjectId()); System.out.println("doc.id before: " + doc.get("_id")); new Mongo("localhost").getDB("test").getCollection("t").insert(doc); System.out.println("doc.id after: " + doc.get("_id"));
mã này hoạt động tốt cho tôi, được thử nghiệm trên các phiên bản mới mongo 2.2.2, trình điều khiển 2.10.1 –
zlob
này là chèn hoạt động:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Sau khi chèn u được cuối cùng chèn 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);
sau khi chuyển đổi giá trị thành loại liên.
Để tránh đúc Object
-ObjectId
, cho một com.mongodb.client.MongoCollection collection
và org.bson.Document doc
, bạn có thể làm như sau:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
Trong MongoTemplate.class có một phương pháp
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));
}
và phương pháp sẽ đặt id cho chúng tôi
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);
}
chúng ta có thể thấy nếu thực thể là một lớp con của BasicDBObject, nó sẽ thiết lập một id cho chúng ta.
- 1. SqlAlchemy: lấy id của hồ sơ cuối cùng được chèn
- 2. Lấy id được chèn cuối cùng cho nhiều hàng
- 3. DB2 cách lấy id chèn cuối cùng từ một bảng
- 4. Lấy id chèn cuối cùng với học thuyết 2?
- 5. Django - id chèn cuối cùng
- 6. PHP Lấy id chèn cuối cùng từ kết nối ODBC
- 7. Cách chèn nhiều tài liệu cùng một lúc trong MongoDB qua Java
- 8. Làm cách nào để lấy id được chèn cuối cùng bằng cách sử dụng api JS?
- 9. Cách tốt nhất để lấy ID của hàng được chèn cuối cùng trên SQLite
- 10. Lấy id của thực thể được chèn vào trong datomic?
- 11. Nhận id được chèn cuối cùng Tiếp theo
- 12. Làm thế nào để chèn một tài liệu vào mongodb sử dụng mongoose và nhận được id được tạo ra?
- 13. PHP Postgres: Nhận ID chèn cuối cùng
- 14. vb.net sql ID được chèn lần cuối
- 15. Cách lấy id được chèn cuối cùng trong mô hình địa chỉ khách hàng Magento
- 16. Cách lấy giá trị từ hàng được chèn cuối cùng?
- 17. Có cách nào để lấy id được chèn cuối cùng của cột KHÔNG tăng tự động trong MySQL không?
- 18. làm cách nào tôi có thể nhận id cuối cùng được chèn vào trong formview
- 19. Làm cách nào để có được 50 tài liệu cuối cùng trong mongoDB?
- 20. id chèn cuối cùng với bảng zend db trừu tượng
- 21. Cách tốt nhất để lấy id được chèn cuối cùng bằng cách sử dụng sqlite từ Java là gì?
- 22. zend framework nhận id chèn cuối cùng của chèn nhiều hàng bằng cách thực hiện
- 23. Lấy id chèn cuối cùng với Oracle 11g bằng cách sử dụng JDBC
- 24. Sử dụng ID đích Mongodb làm ID tài liệu?
- 25. Mongo DB: Nhận tất cả tài liệu được chèn sau lần cuối cùng được biết
- 26. Chèn dữ liệu vào MongoDB - không có lỗi, không chèn
- 27. Lấy ID được chèn từ saveAll() trong CakePHP
- 28. mongodb: trả về một mảng các id tài liệu
- 29. Trả về ID được chèn cuối cùng mà không cần sử dụng truy vấn thứ hai
- 30. Nhận giá trị được chèn vào cuối cùng từ cơ sở dữ liệu sqlite Android
trả lời câu hỏi của riêng bạn là [khuyến khích] (http://stackoverflow.com/help/self-answer), đừng lo lắng về điều đó. –
Cảm ơn vì điều này. Bạn có biết làm thế nào để làm tương tự bằng cách sử dụng dữ liệu mùa xuân mongodb? –