MongoDB Java Tutorials - Hướng dẫn thêm dữ liệu trong MongoDB sử dụng Java
Overview
Ở bài viết trước tôi đã Hướng dẫn kết nối MongoDB sử dụng MongoDB Java Driver. Tiếp tục bài viết này, tôi sẽ hướng dẫn cách thêm dữ liệu trong MongoDB sử dụng ngôn ngữ Java.
Tôi sẽ cố gắng thiết kế abstract nhất để có thể dụng nó cho việc thêm nhiều kiểu dữ liệu vào nhiều Collection.
Insert Data to MongoDB
Đầu tiên tôi xây dựng class InsertDocmunet
với các tham số cần thiết để kết nối MongoDB.
import com.hungcdev.connection.MongoDBConnection;
import com.mongodb.client.MongoDatabase;
public class InsertDocument {
private MongoDBConnection mongoDBConnection;
private MongoDatabase mongoDatabase;
public InsertDocument(String ip, int port, String databaseName) {
this.mongoDBConnection = new MongoDBConnection();
this.mongoDBConnection.connectMongoDBWithPOJOs(ip, port);
this.mongoDatabase = mongoDBConnection.getMongoClient().getDatabase(databaseName);
}
Chú ý: tôi sử dụng hàm connectMongoDBWithPOJOs
như đã giải thích ở bài viết trước.
Tiếp theo, tôi tạo hàm để thêm một Document vào MongoDB:
public <T> void insert(String collectionName, Class<T> classType, T document){
MongoCollection<T> collection = mongoDatabase.getCollection(collectionName, classType);
collection.insertOne(document);
}
Để thêm nhiều Document vào MongoDB, xây dựng hàm như sau:
public <T> void insertMany(String collectionName, Class<T> classType, T... documents) {
MongoCollection<T> collection = mongoDatabase.getCollection(collectionName, classType);
collection.insertMany(List.of(documents));
}
Insert Example
Tôi sẽ lấy ví dụ về việc thêm đối tượng Post
vào MongoDB. Tôi có sử dụng thư viện lombok
để tiện lợi cho việc khởi tạo cũng cũng Getter Setter cho Class.
Trong MongoDB, có trường _id
sẽ là khóa chính của Document, nếu trong trường hợp đối tượng không có trường id
hoặc có trường id mà không có giá trị khi insert. MongoDB sẽ tự tạo ra giá trị và luôn đảm bảo nó là riêng biệt.
Post.class
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Post {
private String id;
private String title;
private String user;
private String content;
private List<String> tags;
private boolean enable;
}
Cuối cùng, khởi tạo class xây dựng dữ liệu và thực hiện insert:
public static void main(String[] args) {
InsertDocument insertDocument = new InsertDocument("localhost", 27017, "HungcDev");
Post post = Post.builder()
.id(UUID.randomUUID().toString())
.title("Mongodb Java tutorial")
.user("Hungcdev")
.content("Huong dan intert Document trong MongoDB")
.tags(List.of("Mongodb", "Mongodb Java"))
.enable(true)
.build();
insertDocument.insert("Post", Post.class, post);
System.out.println("Insert Post Successful!");
}
Done!
Nếu bạn không sử dụng kết nối MongoDB ánh xạ POJOs, thì bạn sẽ gặp phải lỗi giống như:
Exception in thread "main" org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.hungcdev.data.Post.
at org.bson.internal.CodecCache.getOrThrow(CodecCache.java:57)
at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:64)
at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:39)
at com.mongodb.internal.operation.Operations.getCodec(Operations.java:531)
at com.mongodb.internal.operation.Operations.bulkWrite(Operations.java:400)
at com.mongodb.internal.operation.Operations.insertOne(Operations.java:333)
at com.mongodb.internal.operation.SyncOperations.insertOne(SyncOperations.java:169)
at com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:503)
at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:487)
at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:481)
...
Source code
Source code liên quan về bài viết: https://github.com/hungcdev/MongoDB-Java-Tutorials