MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mọi thứ bạn cần biết về ứng dụng khách MongoDB

Nếu bạn đã từng là bất kỳ dạng hệ thống quản lý cơ sở dữ liệu quan hệ nào từ trước đến nay, có lẽ bạn đã bắt gặp cái tên MongoDB. Được giới thiệu lần đầu tiên vào năm 2009, ngày nay mongoDb là một trong những hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất trong ngành. Lý do chính đằng sau sự phổ biến điên cuồng của nó bất chấp sự hiện diện của các phần mềm quản lý cơ sở dữ liệu quan hệ cũ như MySql có mặt trên thị trường là số lượng đa dạng và tính linh hoạt tuyệt vời mà nó mang lại. Việc sử dụng MongoDB loại bỏ nhiều nhu cầu, một trong số đó là nhu cầu tạo cơ sở dữ liệu và xác định kiểu dữ liệu mỗi khi một dự án mới được bắt đầu. Chương trình của bài viết về ứng dụng khách MongoDB:

  • Điều kiện tiên quyết đối với Ứng dụng khách MongoDB
  • Tạo dự án trên Maven
  • Thêm dịch vụ nghỉ ngơi JSON đầu tiên của bạn
  • Định cấu hình cơ sở dữ liệu MongoDB
  • Chạy cơ sở dữ liệu MongoDB đã định cấu hình
  • Tạo giao diện người dùng
  • Đơn giản hóa ứng dụng MongoDB bằng codec BSON
  • Mã cuối cùng

Nhưng để đạt được chức năng tối đa của MongoDB, người ta cần phải làm quen với ứng dụng MongoDB và trong bài viết này, chúng ta sẽ thảo luận về điều đó.

Điều kiện tiên quyết đối với Ứng dụng khách MongoDB

Để hoàn thành bài viết này, trước tiên bạn cần đáp ứng các điều kiện tiên quyết sau.

Đã có IDE trong hệ thống của bạn.
Bộ phát triển Java hoặc JDK phiên bản 1.8 trở lên được cài đặt với JAVA_HOME được định cấu hình đúng cách.
Docker hoặc MongoDB đã được cài đặt.
Apache Maven phiên bản 3.5.3 trở lên.

Kiến trúc mà chúng tôi đã tạo và sử dụng trong hướng dẫn này là một trong những kiến ​​trúc đơn giản nhất. Khi được thực thi, người dùng có thể dễ dàng thêm dữ liệu và phần tử vào danh sách, sau đó danh sách sẽ tự động được cập nhật trong cơ sở dữ liệu.

Cùng với điều này, chúng tôi đã đảm bảo rằng tất cả giao tiếp giữa dữ liệu và máy chủ là trong JSON và tất cả dữ liệu được lưu trữ trong MongoDB.

Bắt đầu

Để bắt đầu với dự án này, hãy làm theo các bước được nêu bên dưới.

Bước # 1:Tạo dự án trên Maven

Bước đầu tiên luôn là tạo một dự án mới và để thực hiện việc này, hãy sử dụng đoạn mã sau.


mvn io.quarkus:quarkus-maven-plugin:0.22.0:create 
-DprojectGroupId=org.acme 
-DprojectArtifactId=using-mongodb-client 
-DclassName="org.acme.rest.json.FruitResource" 
-Dpath="/fruits" 
-Dextensions="resteasy-jsonb,mongodb-client"

Khi bạn chạy lệnh trên, IDE sẽ nhập các ứng dụng khách JSON-B, MongoDb cũng như RESTEasy / JAX-RS vào hệ thống của bạn.

Tiếp tục với Bước 2.

Bước # 2:Thêm dịch vụ nghỉ ngơi JSON đầu tiên của bạn


In order to do this, use the code below.

package org.acme.rest.json;

import java.util.Objects;

public class Fruit {

private String name;
private String description;

public Fruit() {
}

public Fruit(String name, String description) {
this.name = name;
this.description = description;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof Fruit)) {
return false;
}

Fruit other = (Fruit) obj;

return Objects.equals(other.name, this.name);
}

@Override
public int hashCode() {
return Objects.hash(this.name);
}
}

Với ví dụ trên, đầu tiên chúng ta đã tạo Fruit mà sau này sẽ được sử dụng trong chương trình.

Tiếp theo, chúng ta cần tạo tệp org.acme.rest.json.FruitService, đây sẽ là lớp người dùng của ứng dụng của chúng ta. Để thực hiện việc này, hãy sử dụng mã bên dưới.


package org.acme.rest.json;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

@ApplicationScoped
public class FruitService {

@Inject MongoClient mongoClient;

public List list(){
List list = new ArrayList<>();
MongoCursor cursor = getCollection().find().iterator();

try {
while (cursor.hasNext()) {
Document document = cursor.next();
Fruit fruit = new Fruit();
fruit.setName(document.getString("name"));
fruit.setDescription(document.getString("description"));
list.add(fruit);
}
} finally {
cursor.close();
}
return list;
}

public void add(Fruit fruit){
Document document = new Document()
.append("name", fruit.getName())
.append("description", fruit.getDescription());
getCollection().insertOne(document);
}

private MongoCollection getCollection(){
return mongoClient.getDatabase("fruit").getCollection("fruit");
}
}

Now we need to edit the org.acme.rest.json.FruitResource class to suit our needs. In order to do this, use the code below.

@Path("/fruits")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class FruitResource {

@Inject FruitService fruitService;

@GET
public List list() {
return fruitService.list();
}

@POST
public List add(Fruit fruit) {
fruitService.add(fruit);
return list();
}
}

Tiếp tục với Bước 3.

Bước # 3:Định cấu hình cơ sở dữ liệu mongoDb

Cú pháp cũng như mã tiêu chuẩn để định cấu hình cơ sở dữ liệu mongoDb như được cung cấp bên dưới.


# configure the mongoDB client for a replica set of two nodes
quarkus.mongodb.connection-string = mongodb://mongo1:27017,mongo2:27017

Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng đoạn mã sau để định cấu hình cơ sở dữ liệu.


# configure the mongoDB client for a replica set of two nodes
quarkus.mongodb.connection-string = mongodb://localhost:27017

Tiếp tục với Bước 4.

Bước # 4:Chạy cơ sở dữ liệu MongoDB đã định cấu hình

Bước tiếp theo là chạy cơ sở dữ liệu MongoDB mà chúng ta vừa tạo. Để làm điều này, hãy sử dụng mã bên dưới.


docker run -ti --rm -p 27017:27017 mongo:4.0

Tiếp tục với Bước 5.

Bước # 5:Tạo giao diện người dùng

Bây giờ tất cả công việc ở phần phụ trợ của ứng dụng đã xong, chúng ta hãy xem mã được sử dụng để viết mã giao diện người dùng của ứng dụng của chúng tôi.


package org.acme.rest.json;

import io.quarkus.mongodb.ReactiveMongoClient;
import io.quarkus.mongodb.ReactiveMongoCollection;
import org.bson.Document;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import java.util.List;
import java.util.concurrent.CompletionStage;

@ApplicationScoped
public class ReactiveFruitService {

@Inject
ReactiveMongoClient mongoClient;

public CompletionStage<List> list(){
return getCollection().find().map(doc -> {
Fruit fruit = new Fruit();
fruit.setName(doc.getString("name"));
fruit.setDescription(doc.getString("description"));
return fruit;
}).toList().run();
}

public CompletionStage add(Fruit fruit){
Document document = new Document()
.append("name", fruit.getName())
.append("description", fruit.getDescription());
return getCollection().insertOne(document);
}

private ReactiveMongoCollection getCollection(){
return mongoClient.getDatabase("fruit").getCollection("fruit");
}
}

package org.acme.rest.json;

import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.concurrent.CompletionStage;

@Path("/reactive_fruits")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ReactiveFruitResource {

@Inject ReactiveFruitService fruitService;

@GET
public CompletionStage<List> list() {
return fruitService.list();
}

@POST
public CompletionStage<List> add(Fruit fruit) {
fruitService.add(fruit);
return list();
}
}

Trong ví dụ trên, chúng tôi đang sử dụng ứng dụng khách mongoDb phản ứng để tạo thuận lợi cho việc hình thành giao diện người dùng.

Tiếp tục với Bước 6.

Bước # 6:Đơn giản hóa ứng dụng mongoDb bằng cách sử dụng codec BSON

Để làm điều này, hãy sử dụng mã bên dưới.


package org.acme.rest.json.codec;

import com.mongodb.MongoClient;
import org.acme.rest.json.Fruit;
import org.bson.*;
import org.bson.codecs.Codec;
import org.bson.codecs.CollectibleCodec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;

import java.util.UUID;

public class FruitCodec implements CollectibleCodec {

private final Codec documentCodec;

public FruitCodec() {
this.documentCodec = MongoClient.getDefaultCodecRegistry().get(Document.class);
}

@Override
public void encode(BsonWriter writer, Fruit fruit, EncoderContext encoderContext) {
Document doc = new Document();
doc.put("name", fruit.getName());
doc.put("description", fruit.getDescription());
documentCodec.encode(writer, doc, encoderContext);
}

@Override
public Class getEncoderClass() {
return Fruit.class;
}

@Override
public Fruit generateIdIfAbsentFromDocument(Fruit document) {
if (!documentHasId(document)) {
document.setId(UUID.randomUUID().toString());
}
return document;
}

@Override
public boolean documentHasId(Fruit document) {
return document.getId() != null;
}

@Override
public BsonValue getDocumentId(Fruit document) {
return new BsonString(document.getId());
}

@Override
public Fruit decode(BsonReader reader, DecoderContext decoderContext) {
Document document = documentCodec.decode(reader, decoderContext);
Fruit fruit = new Fruit();
if (document.getString("id") != null) {
fruit.setId(document.getString("id"));
}
fruit.setName(document.getString("name"));
fruit.setDescription(document.getString("description"));
return fruit;
}
}

Bây giờ chúng ta sẽ sử dụng CodecProvider để liên kết lớp này với lớp Fruit đã có.


package org.acme.rest.json.codec;

import org.acme.rest.json.Fruit;
import org.bson.codecs.Codec;
import org.bson.codecs.configuration.CodecProvider;
import org.bson.codecs.configuration.CodecRegistry;

public class FruitCodecProvider implements CodecProvider {
@Override
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Fruit.class) {
return (Codec) new FruitCodec();
}
return null;
}

}

Tiếp tục với Bước 7.

Bước # 7:Mã cuối cùng

Mã cuối cùng cho ứng dụng này, sẽ giống như thế này.


package org.acme.rest.json;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

@ApplicationScoped
public class CodecFruitService {

@Inject MongoClient mongoClient;

public List list(){
List list = new ArrayList<>();
MongoCursor cursor = getCollection().find().iterator();

try {
while (cursor.hasNext()) {
list.add(cursor.next());
}
} finally {
cursor.close();
}
return list;
}

public void add(Fruit fruit){
getCollection().insertOne(fruit);
}

private MongoCollection getCollection(){
return mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class);
}
}

Kết luận

Bây giờ bạn đã biết cách cấu hình và sử dụng ứng dụng MongoDB trong hệ thống của mình. Hãy tiếp tục và thử các mã này trong hệ thống của bạn và cho chúng tôi biết trải nghiệm của bạn.

Tóm tắt bài viết

Tìm hiểu tất cả về ứng dụng MongoDB và cách bạn có thể định cấu hình tương tự trong hệ thống của mình cho các mục đích sử dụng khác nhau. Đọc để biết thêm.

Với điều này, chúng ta đi đến phần cuối của Ứng dụng khách MongoDB bài báo.

Các đợt sắp tới cho khóa đào tạo cấp chứng chỉ MongoDB
Tên khóa học Ngày
Khóa đào tạo chứng chỉ MongoDB

Lớp học bắt đầu vào ngày 4 tháng 6 năm 2022

Ngày 4 tháng 6

SAT &SUN (Đợt cuối tuần)
Xem chi tiết
Khóa đào tạo chứng chỉ MongoDB

Lớp học khai giảng vào ngày 6 tháng 8 năm 2022

Ngày 6 tháng 8

SAT &SUN (Đợt cuối tuần)
Xem chi tiết

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hợp nhất hai bộ sưu tập trong MongoDB

  2. Làm thế nào để sử dụng tập hợp MongoDB để phân trang?

  3. Truy vấn ngày với ISODate trong mongodb dường như không hoạt động

  4. Làm cách nào để đổi tên trường cho tất cả các tài liệu trong MongoDB?

  5. Hệ thống tệp chỉ đọc khi thử mkdir / data / db trên Mac