Hướng dẫn using mongodb with java - sử dụng mongodb với java

Hướng dẫn using mongodb with java - sử dụng mongodb với java
Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất. Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hướng dẫn using mongodb with java - sử dụng mongodb với java
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook
Hướng dẫn using mongodb with java - sử dụng mongodb với java
Facebook

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Sử dụng $inc trong trường hợp bạn muốn tăng giá trị cho một cột nào đó. Chẳng hạn tìm các City và update cột population (dân số) lên 10000.

Kết quả Update: MongoDB:

  • 9.4- Ví dụ Update với $set và $inc Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ.
  • Ví dụ: Document trong MongoDB nó tương ứng với khái niệm Record (bản ghi) trong cơ sở dữ liệu quan hệ.

9.5- Update nhiều tài liệu (multi) rất linh hoạt, Bạn kết nối vào một Database hoặc Collection mà không nhất thiết rằng nó tồn tại, nó sẽ được tự động tạo ra khi bạn có một thao tác nào đó. Điều này sẽ được giải thích trong các ví dụ liên quan của tài liệu này.

Sử dụng method:

10- Delete Document query, insert, update delete dữ liệu.
MongoDB không có khái niệm Join (kết nối) giữa 2 Collection với nhau, mọi việc truy vấn đều thực hiện trên một Collection. Và như vậy bạn chẳng cần phải học làm thế nào để Join 2 Collection, mọi thứ chỉ còn là viết điều kiện where cho một Collection. Cụ thể là:

  • TODOCollection.
  • 1- Một số khái niệm của MongoDB Collection.
  • Trước hết chúng ta cần hiểu một số khái niệm trong MongoDB: Document trên một Collection.

Khái niệm Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ.cung cấp lớp DBObject để mô tả một cấu trúc dữ liệu JSON, và nó mô tả một điều kiện.

Khái niệm Document trong MongoDB nó tương ứng với khái niệm Record (bản ghi) trong cơ sở dữ liệu quan hệ.

MongoDB rất linh hoạt, Bạn kết nối vào một Database hoặc Collection mà không nhất thiết rằng nó tồn tại, nó sẽ được tự động tạo ra khi bạn có một thao tác nào đó. Điều này sẽ được giải thích trong các ví dụ liên quan của tài liệu này. first_name = "John"last_name = "Smith", JSON trong trường hợp này sẽ là:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

2- Vấn đề trọng tâm ID phòng ban là 10 và mã nhân viên là "E01" hoặc "E02", cấu trúc JSON bạn cần viết sẽ là:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Khi bạn làm việc với một cơ sở dữ liệu, câu hỏi của bạn luôn là làm thế nào tôi có thể query, insert, update và delete dữ liệu.MongoDB không có khái niệm Join (kết nối) giữa 2 Collection với nhau, mọi việc truy vấn đều thực hiện trên một Collection. Và như vậy bạn chẳng cần phải học làm thế nào để Join 2 Collection, mọi thứ chỉ còn là viết điều kiện where cho một Collection. Cụ thể là: Java API tạo ra DBObject mô tả một điều kiện cho câu lệnh Query. Java cung cấp cho bạn một số lớp:

  • Viết điều kiện để truy vấn dữ liệu trên một Collection.
  • Viết điều kiện để cập nhập dữ liệu trên một Collection.

Viết điều kiện để xóa các Document trên một Collection.DBObject.

  • 9.3- Ví dụ Update với $inc

Sử dụng $inc trong trường hợp bạn muốn tăng giá trị cho một cột nào đó. Chẳng hạn tìm các City và update cột population (dân số) lên 10000.

Kết quả Update:

  • File/New/Other...

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Hướng dẫn using mongodb with java - sử dụng mongodb với java

9.4- Ví dụ Update với $set và $inc

  • Ví dụ: : org.o7planning
  • 9.5- Update nhiều tài liệu (multi) : JavaMongoDBTutorial

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Sử dụng method:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

10- Delete Document

TODO

pom.xml



 4.0.0
 org.o7planning
 JavaMongoDBTutorial
 0.0.1-SNAPSHOT


 
   
     
     
         org.mongodb
         mongo-java-driver
         2.12.4
     
   
 



1- Một số khái niệm của MongoDB

Trước hết chúng ta cần hiểu một số khái niệm trong MongoDB: MongoDB của bạn đã sẵn sàng chạy.

Khái niệm Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ.MongoDB tại:

MyConstants.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}

Khái niệm Document trong MongoDB nó tương ứng với khái niệm Record (bản ghi) trong cơ sở dữ liệu quan hệ.MongoUtils với các method tiện ích để kết nối vào Database MongoDB. Trong thực hành bạn có thể thay đổi các thông số HOST, PORT, .. cho phù hợp với trường hợp của mình.

MongoUtils.java

MongoDB rất linh hoạt, Bạn kết nối vào một Database hoặc Collection mà không nhất thiết rằng nó tồn tại, nó sẽ được tự động tạo ra khi bạn có một thao tác nào đó. Điều này sẽ được giải thích trong các ví dụ liên quan của tài liệu này.

2- Vấn đề trọng tâm MongoUtils để test kết nối:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Khi bạn làm việc với một cơ sở dữ liệu, câu hỏi của bạn luôn là làm thế nào tôi có thể query, insert, update và delete dữ liệu.MongoDB không có khái niệm Join (kết nối) giữa 2 Collection với nhau, mọi việc truy vấn đều thực hiện trên một Collection. Và như vậy bạn chẳng cần phải học làm thế nào để Join 2 Collection, mọi thứ chỉ còn là viết điều kiện where cho một Collection. Cụ thể là:

Viết điều kiện để truy vấn dữ liệu trên một Collection.rất linh hoạt, nếu bạn muốn trèn một bản ghi (Document) vào một Collection. Nếu Collection này không tồn tại nó sẽ tự động được tạo ra, sau đó các bản ghi được trèn vào.

Trong ví dụ này chúng ta sẽ trèn 4 document vào Collection Department. Trong MongoDB cột _id chính là khóa chính (Primary Key), trong trường hợp bạn trèn vào một tài  liệu (Document), mà không chỉ định rõ khóa chính, cột _id vẫn sẽ được tạo ra, với giá trị là một chuỗi ngẫu nhiên 36 ký tự. Department. Trong MongoDB cột _id chính là khóa chính (Primary Key), trong trường hợp bạn trèn vào một tài  liệu (Document), mà không chỉ định rõ khóa chính, cột _id vẫn sẽ được tạo ra, với giá trị là một chuỗi ngẫu nhiên 36 ký tự.


{
"_id" : 10 ,
"dept_no" : "D10" ,
"dept_name" : "ACCOUNTING" ,
"location" : "NEW YORK"
}

{
"_id" : 20 ,
"dept_no" : "D20" ,
"dept_name" : "RESEARCH" ,
"location" : "DALLAS" ,
"description" : "First department"
}

{
"_id" : 30 ,
"dept_no" : "D30" ,
"dept_name" : "SALES" ,
"location" : "CHICAGO"
}

{
"_id" : 40 ,
"dept_no" : "D40" ,
"dept_name" : "OPERATIONS" ,
"location" : "BOSTON"
}

InsertDemo.java


package org.o7planning.tutorial.mongodb.insert;

import java.net.UnknownHostException;

import org.o7planning.tutorial.mongodb.MongoUtils;
import org.o7planning.tutorial.mongodb.MyConstants;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;

public class InsertDemo {

 public static void main(String args[]) throws UnknownHostException {

      // Kết nối tới MongoDB.
     MongoClient mongoClient = MongoUtils.getMongoClient();

     // Kết nối tới Database
     // (Không nhất thiết DB này phải tồn tại sẵn
     // nó sẽ được tự động tạo ra nếu chưa tồn tại).
     DB db = mongoClient.getDB(MyConstants.DB_NAME);

     // Lấy ra Collection với tên Department.
     // Không nhất thiết Collection này phải tồn tại trong DB.
     DBCollection dept = db.getCollection("Department");

     // Insert Document 1
     BasicDBObject doc1 = new BasicDBObject();
     doc1.append("_id", 10);
     doc1.append("dept_no", "D10");
     doc1.append("dept_name", "ACCOUNTING");
     doc1.append("location", "NEW YORK");
     dept.insert(doc1);

     // Insert Document 2

     BasicDBObject doc2 = new BasicDBObject();
     doc2.append("_id", 20);
     doc2.append("dept_no", "D20");
     doc2.append("dept_name", "RESEARCH");
     doc2.append("location", "DALLAS");
     doc2.append("description", "First department");
     dept.insert(doc2);

     // Insert Document 3
     BasicDBObject doc3 = new BasicDBObject();
     doc3.append("_id", 30);
     doc3.append("dept_no", "D30");
     doc3.append("dept_name", "SALES");
     doc3.append("location", "CHICAGO");
     dept.insert(doc3);

     // Insert Document 4
     BasicDBObject doc4 = new BasicDBObject();
     doc4.append("_id", 40);
     doc4.append("dept_no", "D40");
     doc4.append("dept_name", "OPERATIONS");
     doc4.append("location", "BOSTON");
     dept.insert(doc4);
   
     System.out.println("Done!");
 }
}

Chạy class InsertDemo.java và xem kết quả trên RoboMongo (Công cụ trực quan quản lý MongoDB). InsertDemo.java và xem kết quả trên RoboMongo (Công cụ trực quan quản lý MongoDB).

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Nếu database không tồn tại, nó sẽ được tạo ra. Nếu Collection chưa tồn tại nó cũng tự động được tạo ra. Đó chính là sự khác biệt của MongoDB với các loại Database quan hệ khác (Oracle, MySQL, SQLServer...) Collection chưa tồn tại nó cũng tự động được tạo ra. Đó chính là sự khác biệt của MongoDB với các loại Database quan hệ khác (Oracle, MySQL, SQLServer...)

Hướng dẫn using mongodb with java - sử dụng mongodb với java

7- Collection

Khái niệm Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ. Chúng ta xem một ví dụ lấy ra danh sách các Collection trong database: Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ. Chúng ta xem một ví dụ lấy ra danh sách các Collection trong database:

GettingCollectionDemo.java


package org.o7planning.tutorial.mongodb.collection;

import java.net.UnknownHostException;
import java.util.List;
import java.util.Set;

import org.o7planning.tutorial.mongodb.MongoUtils;
import org.o7planning.tutorial.mongodb.MyConstants;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;

public class GettingCollectionDemo {

   public static void main(String[] args) throws UnknownHostException {

       MongoClient mongoClient = MongoUtils.getMongoClient();
       DB db = mongoClient.getDB(MyConstants.DB_NAME);

       // Collection trong MongoDB tương đương với Table trong
       // cơ sở dữ liệu quan hệ (Oracle, MySQL,SQLServer,..)
       DBCollection dept = db.getCollection("Department");
       
       System.out.println("Collection: "+ dept);
       
       // Số Document.
       // Chú ý: Document trong MongoDB tương ứng với 1 dòng
       // dữ liệu trong cơ sở dữ liệu quan hệ.
       long rowCount = dept.count();
       System.out.println(" Document count: "+ rowCount);
       
       System.out.println(" ------------ ");
       
       // Danh sách tất cả Các Collection.
       Set collections = db.getCollectionNames();
       
       for(String coll: collections)  {
           System.out.println("Collection: "+ coll);
       }
       
   }

}

Kết quả chạy ví dụ:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8- Query Collection

8.1- Điều kiện truy vấn trong MongoDB

Hãy xem một vài trường hợp thiết lập điều kiện where (Đây là kiến thức thuần thúy của MongoDB) MongoDB)

8.1.1- Các toán tử so sánh trong MongoDB

$gt Khớp với các giá trị lớn hơn giá trị quy định trong truy vấn. (Greater than)
$gte Khớp với các giá trị lớn hơn hoặc bằng giá trị quy định trong truy vấn. (Greater than or Equals)
$in Khớp với bất kỳ giá trị nào nằm trong một tập hợp cho trước. (In)
$lt Khớp với các giá trị nhỏ hơn giá trị quy định trong truy vấn. (Less than)
$lte Khớp với các giá trị nhỏ hơn hoặc bằng giá trị quy định trong truy vấn. (Less than or Equals)
$ne Khớp với tất cả các giá trị khác với giá trị quy định trong truy vấn. (Not Equals)
$nin Khớp với bất kỳ giá trị nào không nằm trong một tập hợp cho trước. (Not in)

8.2- Java API cho truy vấn dữ liệu


// Một số method của class DBCollection cho việc truy vấn:

public DBCursor find(DBObject ref)


public DBCursor find(DBObject ref, DBObject keys)

8.3- Ví dụ truy vấn đơn giản

Ví dụ này chúng ta sẽ Query vào Collection Department lấy ra các Document. Department lấy ra các Document.

SimpleQueryDemo.java


package org.o7planning.tutorial.mongodb.query;

import java.net.UnknownHostException;

import org.o7planning.tutorial.mongodb.MongoUtils;
import org.o7planning.tutorial.mongodb.MyConstants;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

public class SimpleQueryDemo {

  public static void main(String args[]) throws UnknownHostException {
   
      // Kết nối tới MongoDB.
      MongoClient mongoClient = MongoUtils.getMongoClient();

      DB db = mongoClient.getDB(MyConstants.DB_NAME);

      DBCollection dept = db.getCollection("Department");

      // Truy vấn tất cả các object trong Collection.
      DBCursor cursor = dept.find();
      int i = 1;
      while (cursor.hasNext()) {
          System.out.println("Document: " + i);
          System.out.println(cursor.next());
          i++;
      }

  }
}

Kết quả chạy ví dụ:


Document: 1
{ "_id"  : 10 , "dept_no" : "D10" , "dept_name" : "ACCOUNTING" , "location" : "NEW YORK"}
Document: 2
{ "_id" : 20 , "dept_no" : "D20" , "dept_name" : "RESEARCH" , "location" : "DALLAS" , "description" : "First department"}
Document: 3
{ "_id"  : 30 , "dept_no" : "D30" , "dept_name" : "SALES" , "location" : "CHICAGO"}
Document: 4
{ "_id" : 40 , "dept_no" : "D40" , "dept_name" : "OPERATIONS" , "location" : "BOSTON"}

8- Query Collection

8.1- Điều kiện truy vấn trong MongoDB DBObject bạn có thể sử dụng BasicDBObjectBuilder ví dụ:


BasicDBObjectBuilder whereBuilder = BasicDBObjectBuilder.start();
whereBuilder.append("dept_name", "ACCOUNTING");
//
DBObject where  = whereBuilder.get();
       
// Query
DBCursor cursor = dept.find(where);

Hãy xem một vài trường hợp thiết lập điều kiện where (Đây là kiến thức thuần thúy của MongoDB) Department, tìm các phòng ban có dept_name = 'ACCOUNTING'.

QueryWithParamsDemo1.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
0

Kết quả chạy ví dụ:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8- Query Collection

8.1- Điều kiện truy vấn trong MongoDB BasicDBObjectBuilder. Bạn có thể dễ dàng biết sử dụng của nó theo hình minh họa dưới đây:

Hãy xem một vài trường hợp thiết lập điều kiện where (Đây là kiến thức thuần thúy của MongoDB) add append trong BasicDBObjectBuilder là tương đương nhau.

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8.1.1- Các toán tử so sánh trong MongoDB


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
1

Kết quả chạy ví dụ:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8- Query Collection

QueryWithParamsDemo3.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
2

Kết quả chạy ví dụ:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8- Query Collection

8.1- Điều kiện truy vấn trong MongoDB CreateDataForUpdate dưới đây để có dữ liệu.

CreateDataForUpdate.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
3

Hãy xem một vài trường hợp thiết lập điều kiện where (Đây là kiến thức thuần thúy của MongoDB) City đã được tạo ra với 3 Document (Xem trên công cụ trực quan RoboMongo).

Hướng dẫn using mongodb with java - sử dụng mongodb với java

8.1.1- Các toán tử so sánh trong MongoDB

UpdateDemo.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
4

$gt

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Khớp với các giá trị lớn hơn giá trị quy định trong truy vấn. (Greater than)
Trong suy nghĩ của bạn nó phải là:

Hướng dẫn using mongodb with java - sử dụng mongodb với java

$gte $set trong phần update. Hãy xem tiếp ví dụ tiếp theo.

Khớp với các giá trị lớn hơn hoặc bằng giá trị quy định trong truy vấn. (Greater than or Equals)

UpdateWithSetDemo.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
5

$in

Hướng dẫn using mongodb with java - sử dụng mongodb với java

Khớp với bất kỳ giá trị nào nằm trong một tập hợp cho trước. (In)

$lt $inc trong trường hợp bạn muốn tăng giá trị cho một cột nào đó. Chẳng hạn tìm các City và update cột population (dân số) lên 10000.

UpdateWithIncDemo.java


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
6

Khớp với các giá trị nhỏ hơn giá trị quy định trong truy vấn. (Less than)

Hướng dẫn using mongodb with java - sử dụng mongodb với java

$lte

Khớp với các giá trị nhỏ hơn hoặc bằng giá trị quy định trong truy vấn. (Less than or Equals)


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
7

$ne

Khớp với tất cả các giá trị khác với giá trị quy định trong truy vấn. (Not Equals)


package org.o7planning.tutorial.mongodb;

public class MyConstants {

  // Có thể Database này không tồn tại trên MongoDB của bạn.
  // Nhưng nó sẽ được tự động tạo ra.
  // (Bạn không cần phải thay đổi trường này).
  public static final String DB_NAME ="MyStudyDB";


}
8

$nin

  • Khớp với bất kỳ giá trị nào không nằm trong một tập hợp cho trước. (Not in)