Code ví dụ Java MongoDB – Search, Select, Find document

Code ví dụ Java MongoDB – Search, Select, Find document

(Xem lại: Hướng dẫn MongoDB)

Cài đặt MongoDB JDBC Driver

Nếu bạn sử dụng maven thì thêm dependency sau:

<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.8.0</version>
</dependency>

Hoặc download file jar: mongo-java-driver-3.8.0.jar

Code ví dụ

Trước tiên, mình sẽ insert trước 1 số document sau vào collection player của database stackjava và sẽ tiến hành search, select trên dữ liệu này.

use stackjava
db.player.insert([
  {'_id':'1', 'name':'neymar', 'country':'brazil', 'age':25},
  {'_id':'2', 'name':'hazard', 'country':'belgium', 'age':25},
  {'_id':'3', 'name':'mbappe', 'country':'france', 'age':18},
  {'_id':'4', 'name':'modric', 'country':'croatia', 'age':30},
  {'_id':'5', 'name':'ronaldo', 'country':'portugal', 'age':33},
  {'_id':'6', 'name':'messi', 'country':'argentina', 'age':31},
  {'_id':'7', 'name':'icardi', 'country':'argentina', 'age':25},
  {'_id':'8', 'name':'griezmann', 'country':'france', 'age':28}
])

Code ví dụ Java MongoDB - Search, Select, Find document

Find tất các bản ghi trong collection player

package stackjava.com.mongodb;

import java.util.Iterator;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class FindAll {
  public static void main(String[] args) {
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    MongoDatabase database = mongoClient.getDatabase("stackjava");

    MongoCollection<Document> collection = database.getCollection("player");

    FindIterable<Document> iterDoc = collection.find();

    Iterator<Document> it = iterDoc.iterator();
    System.out.println("--------------- All Player ------------------");
    while (it.hasNext()) {
      System.out.println(it.next());
    }

    mongoClient.close();
  }
}

Để find document MongoDB bằng Java, chúng ta dùng method find()

Kết quả:

--------------- All Player ------------------
Document{{_id=1, name=neymar, country=brazil, age=25.0}}
Document{{_id=2, name=hazard, country=belgium, age=25.0}}
Document{{_id=3, name=mbappe, country=france, age=18.0}}
Document{{_id=4, name=modric, country=croatia, age=30.0}}
Document{{_id=5, name=ronaldo, country=portugal, age=33.0}}
Document{{_id=6, name=messi, country=argentina, age=31.0}}
Document{{_id=7, name=icardi, country=argentina, age=25.0}}
Document{{_id=8, name=griezmann, country=france, age=28.0}}

Find tất các bản ghi trong collection player theo điều kiện

Để thêm điều kiện tìm kiếm, ta sẽ truyền tham số và method find()

Ví dụ 1: Find equal (So sánh bằng)

Tìm kiếm các document có country = france

package stackjava.com.mongodb;

import java.util.Iterator;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class FindEq {
  public static void main(String[] args) {
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    MongoDatabase database = mongoClient.getDatabase("stackjava");

    MongoCollection<Document> collection = database.getCollection("player");

    FindIterable<Document> iterDoc = collection.find(Filters.eq("country", "france"));

    Iterator<Document> it = iterDoc.iterator();
    
    System.out.println("--------------- Find Player WHERE country = france --------------");
    while (it.hasNext()) {
      System.out.println(it.next());
    }

    mongoClient.close();
  }
}

Kết quả:

--------------- Find Player WHERE country = france --------------
Document{{_id=3, name=mbappe, country=france, age=18.0}}
Document{{_id=8, name=griezmann, country=france, age=28.0}}

Ví dụ 2: Find and: like, $lt, $le… (So sánh lớn hơn, nhỏ hơn, like)

Tìm các player có age <= 25 và trong name có chứa ‘i’:

package stackjava.com.mongodb;

import java.util.Iterator;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class FindAnd {
  public static void main(String[] args) {
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    MongoDatabase database = mongoClient.getDatabase("stackjava");

    MongoCollection<Document> collection = database.getCollection("player");

    FindIterable<Document> iterDoc = collection.find(
        Filters.and(Filters.lte("age", 25), Filters.regex("name", "i")));

    Iterator<Document> it = iterDoc.iterator();
    
    System.out.println("----------- SELECT player WHERE name <= 25 AND name Like '%i%' --------");
    while (it.hasNext()) {
      System.out.println(it.next());
    }

    mongoClient.close();
  }
}

Để gộp nhiều điều kiện ta dùng Filters.and hoặc Filters.or

Filters.lte dùng để so sánh nhỏ thua hoặc bằng

Filters.regex dùng để so sánh theo regex (like)

Tương tự Filters.gt, Filters.gte, Filters.in… dùng để tìm kiếm trong mảng, lớn hơn hoặc bằng, lớn hơn…

(Xem lại: Truy vấn dữ liệu trong MongoDB)

Kết quả:

----------- SELECT player WHERE name <= 25 AND name Like '%i%' --------
Document{{_id=7, name=icardi, country=argentina, age=25.0}}

 

Okay, Done!

Download code ví dụ trên tại đây.

(Xem lại: Hướng dẫn MongoDB, Java + MongoDB)

stackjava.com