Lưu trữ Array không phải điều hiển nhiên trong hệ csdl SQL. Ví dụ như MySQL, MariaDB hay MSSQL không có kiểu dữ liệu cho Array. Nhưng với thằng MongoDB thì lại support khá mạnh mẽ.

Trong bài viết này chúng ta cùng nhau tìm hiểu chắc hoạt động cũng như những câu query căn bản với array trong mongodb. Điều này rất hữu ích trong các hệ thống vừa và lớn. Còn nhỏ thì làm sao chả được, hehee.

Theo dõi source code tại đâybranch dev nha

Link postman để test cho dễ.

Match an Array

Để tìm kiếm array đúng với từng phần tử và vị trí của từng phần tử đó, ta sử dụng như sau:

db.inventory.find( { tags: ["red", "blank"] } )

Ngoài ra, nếu chỉ muốn tìm một array chứa các phần tử, không quan tâm thứ tự hoặc những phần tử khác ta dùng $all oparator ( chỉ cần có “red” và “blank” là được)

db.inventory.find( { tags: { $all: ["red", "blank"] } } )

Query an Array for an Element

Truy vấn với phần tử mảng có chứa ít nhất 1 phần tử thỏa giá trị đã chỉ định.

Ví dụ truy vấn đến document nào trong đó “tags” chứa “red”:

db.inventory.find( { tags: "red" } )

hoặc ta có thể chỉ định điều kiện cho “tags” bằng các toán tử so sánh ( tham khảo tại đây ).

db.inventory.find( { dim_cm: { $gt: 25 } } )

Specify Multiple Conditions for Array Elements

Khi chỉ định các điều kiện kết hợp trên mảng, ta chỉ định các truy vấn sao cho 1 phần tử trong đó phù hợp với điều điện hoặc các phần thử thỏa hết điều kiện.

Truy vấn với nhiều điều kiện trên các phần tử

Truy vấn với mảng chứa các phần tử thỏa mãn với các điều kiện truy vấn.

Ví dụ:

db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )

Một phần tử có thể thỏa mãn điều kiện lớn hơn 15 và phần thử khác thỏa bé hơn 20, hoặc 1 phần tử có thể thỏa 2 điều kiện.

Truy vấn với 1 phần tử đáp ứng nhiều điều kiện

Sử dụng $elemMatch operator để chỉ định kiểm tra trên từng phần tử của array sao cho ít nhất 1 phần tử thỏa hết các điều kiện.

db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )

Lấy ra các document thỏa dim_cm array có ít nhất 1 phần tử vừa lớn hơn 22 vừa nhỏ hơn 30.

Truy vấn phần tử theo vị trí

kiểm tra phần tử có index “n” trong array có thỏa điều kiện hay không

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )

hoặc Truy vấn theo kích thước của array

db.inventory.find( { "tags": { $size: 3 } } )

Kết luận

Qua bài hôm nay phần nào đó giúp các bạn hình dung ra được cách hoạt động cũng như một số query căn bản. Tùy vào nhu cầu mà chúng ta áp dụng cho nó hợp lý.

Tài liệu tham khảo:

  • https://www.mongodb.com/docs/manual/tutorial/query-arrays/

Rất mong được sự ủng hộ của mọi người để mình có động lực ra những bài viết tiếp theo.
{\__/}
( ~.~ )
/ > ♥️ I LOVE YOU 3000

JUST DO IT!