MongoDB Java Tutorials - Hướng dẫn truy vấn dữ liệu trong MongoDB Sử dụng Java - Phần 2

Overview

Ở bài viết trước tôi đã Hướng dẫn truy vấn dữ liệu trong MongoDB Phần 1.

Tiếp tục bài viết này, tôi sẽ hướng dẫn truy vấn dữ liệu trong MongoDB Sử dụng Java Phần 2. Phần này tôi sẽ hướng dẫn truy vấn dữ liệu trên embedded/nested documents (document nằm trong document).

Query nested Field

Để chỉ định một điều kiện truy vấn trên một trường thuộc embedded document hoặc nested document, chúng ta sử dụng ký tự ".".

Query Embedded Document Examples

Với data model Post ví dụ ở các bài viết trước, tôi bổ sung thêm đối tượng PostQuality là embedded Document của Post:

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Post {
    private String id;
    private String title;
    private String user;
    private String content;
    private List<String> tags;
    private PostQuality postQuality;
    private int view;
    private boolean enable;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class PostQuality {
    private int likeNumber;
    private int shareNumber;
}
  1. Data Example - Xây dựng các document Post và thêm vào Database để lấy dữ liệu truy vấn
private static void initDataExample(String ip, int port , String databaseName, String collection) {
    InsertDocument insertDocument = new InsertDocument(ip, port, databaseName);
    insertDocument.insertMany(collection, Post.class,
            Post.builder().id(UUID.randomUUID().toString()).title("Mongodb").user("Hungcdev").postQuality(new PostQuality(120, 50)).view(100).enable(true).build(),
            Post.builder().id(UUID.randomUUID().toString()).title("Spring").user("Hungcdev").postQuality(new PostQuality(120, 100)).view(200).enable(false).build(),
            Post.builder().id(UUID.randomUUID().toString()).title("Java").user("AtomPtit").postQuality(new PostQuality(50, 10)).view(300).enable(true).build(),
            Post.builder().id(UUID.randomUUID().toString()).title("Spring Boot").user("AtomPtit").postQuality(new PostQuality(70, 50)).view(400).enable(true).build(),
            Post.builder().id(UUID.randomUUID().toString()).title("PHP").user("HungHoi").postQuality(new PostQuality(150, 120)).view(500).enable(true).build()
    );
}
  1. Embedded Document - Tìm kiếm các document trong colleciton với điều kiện lượt like lớn hơn 100
private static void findEmbeddedDocumentExample1(String ip, int port, String databaseName, String collection) {
    QueryDocument queryDocument = new QueryDocument(ip, port,databaseName);

    /* tim kiem document voi so luong like lon hon 100 */
    Bson query = Filters.gt("postQuality.likeNumber", 100);

    List<Post> postList = queryDocument.find(collection, Post.class, query);
    System.out.println("--- Document trong Collection Post voi "+ query.toString() + "---");
    postList.forEach(post -> System.out.println(post.toString()));
    System.out.println("--- End ---");
}
OUTPUT:
--- Document trong Collection Post voi Operator Filter{fieldName='postQuality.likeNumber', operator='$gt', value=100}---
Post(id=487b8d10-d9c5-4307-9a5d-4610ad21fc23, title=Mongodb, user=Hungcdev, content=null, tags=null, postQuality=PostQuality(likeNumber=120, shareNumber=50), view=100, enable=true)
Post(id=e204ae49-adab-4b64-8200-f84f9f66f32d, title=Spring, user=Hungcdev, content=null, tags=null, postQuality=PostQuality(likeNumber=120, shareNumber=100), view=200, enable=false)
Post(id=40c59d9e-9e74-47cb-ab4c-ea43cde07896, title=PHP, user=HungHoi, content=null, tags=null, postQuality=PostQuality(likeNumber=150, shareNumber=120), view=500, enable=true)
--- End ---
  1. Embedded Document - Tìm kiếm các document trong colleciton với điều kiện user là AtomPtit và lượt share bằng 50
private static void findEmbeddedDocumentExample2(String ip, int port, String databaseName, String collection) {
    QueryDocument queryDocument = new QueryDocument(ip, port,databaseName);

    /* tim kiem document voi user la AtomPtit va so luong share bang 50 */
    Bson query = Filters.and(Filters.eq("user", "AtomPtit"), Filters.eq("postQuality.shareNumber", 50));

    List<Post> postList = queryDocument.find(collection, Post.class, query);
    System.out.println("--- Document trong Collection Post voi "+ query.toString() + "---");
    postList.forEach(post -> System.out.println(post.toString()));
    System.out.println("--- End ---");
}
OUTPUT:
--- Document trong Collection Post voi And Filter{filters=[Filter{fieldName='user', value=AtomPtit}, Filter{fieldName='postQuality.shareNumber', value=50}]}---
Post(id=97a6fbbe-fed5-4378-bf58-110033d6fee1, title=Spring Boot, user=AtomPtit, content=null, tags=null, postQuality=PostQuality(likeNumber=70, shareNumber=50), view=400, enable=true)
--- End ---

Cuối cùng, một hàm main gọi tất cả các hàm đã xây dựng:

public static void main(String[] args) {
    // Thong tin cau hinh de ket noi MongoDB
    String IP = "localhost";
    int port = 27017;
    String databaseName = "HungcDev";
    String collection = "Post";

    /* Khoi tao du lieu */
    initDataExample(IP, port, databaseName, collection);

    findEmbeddedDocumentExample1(IP, port, databaseName,collection);

    findEmbeddedDocumentExample2(IP, port, databaseName,collection);
}

Source code

Source code liên quan về bài viết: https://github.com/hungcdev/MongoDB-Java-Tutorials