Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tương đương SELECT column1, column2 FROM table trong MongoDB (Projection)

Trong MongoDB, tương đương SELECT column1, column2 FROM table là dùng **Projection** trong find() (tham số thứ 2).

Cú pháp

db.collection.find(
    {  },                    // Điều kiện WHERE (rỗng = tất cả)
    { _id: 1, "column1": 1, "column2": 1 }  // Projection: 1 = include
).pretty();

Ví dụ minh họa

Tạo collection equivalentForSelectColumn1Column2Demo:

> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "John", "CustomerAge": 26, "CustomerCountryName": "US" });
> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "David", "CustomerAge": 22, "CustomerCountryName": "AUS" });
> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "Chris", "CustomerAge": 24, "CustomerCountryName": "UK" });

Hiển thị tất cả:

> db.equivalentForSelectColumn1Column2Demo.find().pretty();

Chỉ lấy CustomerName, CustomerAge (giữ _id)

> db.equivalentForSelectColumn1Column2Demo.find({}, { "CustomerName": 1, "CustomerAge": 1 }).pretty();

Kết quả:

{ "_id" : ..., "CustomerName" : "John", "CustomerAge" : 26 }
{ "_id" : ..., "CustomerName" : "David", "CustomerAge" : 22 }
{ "_id" : ..., "CustomerName" : "Chris", "CustomerAge" : 24 }

Chỉ lấy CustomerName, CustomerAge (ẨN _id)

> db.equivalentForSelectColumn1Column2Demo.find({}, { _id: 0, "CustomerName": 1, "CustomerAge": 1 }).pretty();

Kết quả:

{ "CustomerName" : "John", "CustomerAge" : 26 }
{ "CustomerName" : "David", "CustomerAge" : 22 }
{ "CustomerName" : "Chris", "CustomerAge" : 24 }

Quy tắc Projection

  • Include mode (1): Chỉ định field cần lấy. _id mặc định = 1 (phải tắt rõ ràng nếu không muốn).
  • Exclude mode (0): Chỉ định field **không** cần lấy. Không mix include/exclude (trừ _id).
  • Sub-field: { "address.city": 1, _id: 0 }.
  • Array slice: { "tags": { $slice: 3 } } (lấy 3 phần tử đầu).

Trong Aggregation: $project

db.collection.aggregate([
    { $project: { _id: 0, CustomerName: 1, CustomerAge: 1 } }
]);

Lợi ích

  • Giảm network transfer (chỉ gửi field cần thiết).
  • Tăng tốc độ (đọc ít dữ liệu từ disk/memory).
  • Bảo mật: Không lộ field nhạy cảm (password, token, PII...).