Mongodb lookup filter

      No Comments on Mongodb lookup filter

Mongodb lookup

Khi cần query dữ liệu ở nhiều document có quan hệ với nhau, ta thường dùng lệnh lookup.

Khi thực hiện lệnh lookup, đôi khi ta không muốn lấy hết kết quả ở collection được lookup mà chỉ lấy với điều kiện nào đó thôi.

Ví dụ: Mình có 2 documents

  • authors: tác giả của các bài blog
  • blogs: có trường author chứa id của Author

Dữ liệu mẫu như sau:

authors document:

blogs document:

Bây giờ mình muốn “lấy tất cả các blog của tác giả có name là Binh CAO và blog đó có trường published là true.”

Trước hết là lookup để nối dữ liệu vào đã:

Lệnh aggregate nhận tham số là 1 mảng các lệnh, sau đó sẽ thực hiện tuần tự theo mô hình thác nước, output của bước này sẽ là input của bước sau.

Ở lệnh trên, đầu tiên mình tìm các authorsnameBinh CAO, sau đó đem nối với các blogs với điều kiện như trên.

Câu query trên sẽ cho kết quả:

Ok, bây giờ đến giai đoạn lọc dữ liệu:

Mongodb lookup filter

Thêm đoạn lọc dữ liệu sau vào câu lệnh aggregate:

  • $project: lệnh này thực hiện việc lấy dữ liệu từ kết quả ở (các) bước trước.
  • name: 1: lấy trường name, nếu không chỉ định hoặc value là 0 thì sẽ không lấy.
  • blogs: lấy trường blogs ở 2 bước trên, và thực hiện việc lọc (filter).

Câu query đầy đủ:

Kết quả:

Thêm chút nữa

Sau khi lọc xong rồi, có thể bạn sẽ muốn sắp xếp lại (sort) các blogs, mời bạn đọc tiếp bài Mongodb lookup sort

Lập trình và hơn thế nữa

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

Be the First to Comment!

Notify of
avatar