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} ])
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)