Trong khi thực hiện truy vấn trong MongoDB, mặc định thì truy lệnh find() sẽ trả về kết quả gồm tất cả các field trong document. Để giới hạn số lượng các field mà MongoDB gửi tới ứng dụng truy vấn, chúng ta có thể chỉ rõ những field nào cần được trả về hay không được phép trả về. Quá trình này được gọi là projection, trong bài viết này Stringee và các bạn sẽ cùng nhau đi tìm hiểu về quá trình này nhé.

1. Projection trong MongoDB

Chúng ta sẽ cùng nhau tìm hiểu lại về cú pháp tìm kiếm của câu lệnh find() trong MongoDB

db.collection.find(query, projection, options)

Trong đó:

  • query: 1 bson query có dạng json để định nghĩa các điều kiện thực hiện truy vấn các thông tin từ cơ sở dữ liệu. Để trả về toàn bộ kết quả thì chúng ta có thể bỏ qua giá trị này và điền vào một empty document.
  • projection: định nghĩa các field cần được trả về trong các document đáp ứng được điều kiện lọc của truy vấn. Để trả về toàn bộ field chúng ta cần bỏ đi thông tin này.
  • options: định nghĩa các thông tin tùy chọn cho truy vấn. Các options này thay đổi biểu hiện của truy vấn và cách kết quả được trả về.

Projection sẽ được sử dụng như sau:

ProjectionMô tả
<field>: <1 hoặc true>Thêm field này vào trong kết quả trả về. Nếu bạn chỉ ra một giá trị khác 0 thì projection này sẽ được coi là true
<field>: <0 hoặc false>Loại bỏ field này khỏi kết quả trả về
"<field>.$": <1 hoặc true>Sử dụng array $ sẽ trả về element đầu tiên được lọc bởi truy vấn trong một dãy giá trị
<field>: <array projection>Sử dụng một array projection để chỉ ra một dãy các field cần được trả về cho truy vấn
<field>: <$meta expression>Sử dụng phương thức $meta để chỉ ra việc chọn lọc các field trong document
<field>: <aggregation expression>Chỉ ra giá trị của một field đã được tính toán lại trên nó

2. Một số ví dụ sử dụng projection trong truy vấn

Ví dụ nếu bạn muốn trả về toàn bộ document trong collection và chỉ lấy field “name” thì chúng ta sẽ có truy vấn như thế này:

>>> Xem thêm bài viết về MongoDB:

Tìm hiểu về cơ sở dữ liệu phi quan hệ MongoDB

Sử dụng map reduce trong MongoDB

Giới thiệu về GridFS trong MongoDB

db.collection.find(
    {},
    {name:1}
)

Dưới đây là một ví dụ cụ thể: trong collection player có 5 bản ghi như sau:

{'_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},

Ví dụ 1: hiển thị name của tất cả các document thì câu lệnh sẽ là:

db.player.find({},{'name':1})

Câu SQL tương ứng:

SELECT _id, name FROM player

Ví dụ 2: hiển thị name và ẩn _id của các player có age = 25

db.player.find({'age':25},{'name':1, '_id':0})

Kết bài

Bài viết trên đây là những chia sẻ từ Stringee về projection trong MongoDB. Cũng như việc chỉ ra các field cần được trả về trong câu truy vấn SQL, projection cũng là một phương thức rất thuận tiện, hỗ trợ cho người sử dụng cơ sở dữ liệu này.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: