Dự án $ trong MongoDB là gì?

Định hình lại luồng tài liệu bằng cách đổi tên, thêm hoặc xóa các trường. Cũng sử dụng để tạo các giá trị hoặc đối tượng phụ được tính toán. Dùng để

  • Bao gồm các trường từ tài liệu gốc
  • Chèn các trường được tính toán
  • Đổi tên trường
  • Tạo và điền vào các trường chứa tài liệu phụ

Sử dụng để chọn nhanh các trường bạn muốn bao gồm hoặc loại trừ khỏi phản hồi. Xem xét hoạt động khung tổng hợp sau đây

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

Thao tác này bao gồm trường tiêu đềtác giả .

注解

Trường _id luôn được bao gồm theo mặc định. Bạn có thể loại trừ rõ ràng _id như sau.

db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }}
);

Ở đây, phép chiếu không bao gồm trường _id nhưng bao gồm tiêu đề and author fields.

Phép chiếu cũng có thể thêm các trường được tính toán vào luồng tài liệu đi qua đường ống. Một trường được tính toán có thể sử dụng bất kỳ. Xem xét ví dụ sau

db.article.aggregate(
    { $project : {
        title : 1,
        doctoredPageViews : { $add:["$pageViews", 10] }
    }}
);

Ở đây, trường doctoredPageViews biểu thị giá trị của pageViews field after adding 10 to the original field using the .

注解

Bạn phải đặt biểu thức xác định trường được tính toán trong dấu ngoặc nhọn để biểu thức là một đối tượng hợp lệ

Đây là Giai đoạn 2 của ví dụ về truy vấn tổng hợp ba phần sử dụng các giai đoạn $lookup, $project$out. Tải xuống Studio 3T để làm theo ví dụ

Đôi khi chúng tôi cần dọn dẹp một chút dữ liệu trong bộ sưu tập của mình

Tiếp thu từ Giai đoạn 1 – ví dụ về $lookup của chúng tôi – chúng tôi chắc chắn không cần tất cả các trường về khách hàng hoặc các lựa chọn nhà ở giá rẻ

Dự án $ trong MongoDB là gì?

Tài liệu JSON (kỳ tích. dữ liệu chúng tôi không cần)

Giai đoạn $project cực kỳ hữu ích để lọc tài liệu để chỉ hiển thị các trường chúng tôi cần

  • first
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    0
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    1
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    2
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    3
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    4
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    5
  • {
        "first" : 1.0, 
        "last" : 1.0, 
        "address.city" : 1.0, 
        "address.state" : 1.0,
        "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
        "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
        "address.zip_code.affordable_housing_options.Units" : 1.0,
        "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
    }
    6
Dự án $ trong MongoDB là gì?
Không có video nào được chọn hoặc nguồn video không hợp lệ. LỖI NHÚNG. Vui lòng ghi rõ nguồn video

Cú pháp $project khá đơn giản. Chúng tôi cần chỉ ra

{
    "first" : 1.0, 
    "last" : 1.0, 
    "address.city" : 1.0, 
    "address.state" : 1.0,
    "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
    "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
    "address.zip_code.affordable_housing_options.Units" : 1.0,
    "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
}
9 hoặc
db.getCollection("customers").aggregate(
    [
        { 
            "$lookup" : {
                "from" : "housing", 
                "localField" : "address.zip_code", 
                "foreignField" : "Zip Code", 
                "as" : "address.zip_code.affordable_housing_options"
            }
        }, 
        { 
            "$project" : {
                "first" : 1.0, 
                "last" : 1.0, 
                "address.city" : 1.0, 
                "address.state" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
                "address.zip_code.affordable_housing_options.Units" : 1.0, 
                "address.zip_code.affordable_housing_options.Zip Code" : 1.0
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

0 làm giá trị để đưa trường vào phép chiếu của chúng tôi

<field> : <1 or true>

Bản chất của một quy trình tổng hợp là có nhiều giai đoạn, vì vậy bạn có thể sẽ sử dụng $project song song với các toán tử khác như

db.getCollection("customers").aggregate(
    [
        { 
            "$lookup" : {
                "from" : "housing", 
                "localField" : "address.zip_code", 
                "foreignField" : "Zip Code", 
                "as" : "address.zip_code.affordable_housing_options"
            }
        }, 
        { 
            "$project" : {
                "first" : 1.0, 
                "last" : 1.0, 
                "address.city" : 1.0, 
                "address.state" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
                "address.zip_code.affordable_housing_options.Units" : 1.0, 
                "address.zip_code.affordable_housing_options.Zip Code" : 1.0
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

2,
db.getCollection("customers").aggregate(
    [
        { 
            "$lookup" : {
                "from" : "housing", 
                "localField" : "address.zip_code", 
                "foreignField" : "Zip Code", 
                "as" : "address.zip_code.affordable_housing_options"
            }
        }, 
        { 
            "$project" : {
                "first" : 1.0, 
                "last" : 1.0, 
                "address.city" : 1.0, 
                "address.state" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
                "address.zip_code.affordable_housing_options.Units" : 1.0, 
                "address.zip_code.affordable_housing_options.Zip Code" : 1.0
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

3 hoặc $lookup

Tải xuống Studio 3T để truy cập Trình chỉnh sửa tổng hợp

Để minh họa cách hoạt động của $project, hãy xây dựng ví dụ về giai đoạn $lookup của chúng tôi

, sau đó hãy thêm một giai đoạn mới bằng cách nhấp vào biểu tượng dấu cộng màu xanh lục. Điều này sẽ mở một tab giai đoạn mới gọi là Giai đoạn 2

Chọn $project trong menu thả xuống

Dự án $ trong MongoDB là gì?

Hãy dán truy vấn

{
    "first" : 1.0, 
    "last" : 1.0, 
    "address.city" : 1.0, 
    "address.state" : 1.0,
    "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
    "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
    "address.zip_code.affordable_housing_options.Units" : 1.0,
    "address.zip_code.affordable_housing_options.Zip Code" : 1.0, 
}

Nhấp vào nút phát bên dưới Đầu ra giai đoạn để chỉ thực hiện giai đoạn này

Dự án $ trong MongoDB là gì?

Hoặc thực hiện toàn bộ quy trình bằng cách nhấp vào nút phát trên thanh công cụ

Dự án $ trong MongoDB là gì?

Các đầu ra của đường ống và giai đoạn bây giờ sẽ chỉ hiển thị các trường chúng tôi muốn

Để xem các truy vấn tổng hợp trong mã mongo shell, nhấp vào Mã truy vấn và chọn mongo shell từ danh sách thả xuống

Dự án $ trong MongoDB là gì?

Sau đó, bạn có thể chạy truy vấn này trực tiếp trong IntelliShell bằng cách nhấp vào nút Mở trong IntelliShell

Dự án $ trong MongoDB là gì?

Ngoài ra, bạn có thể dán truy vấn sau vào IntelliShell, truy vấn này sẽ mang lại cho bạn kết quả tương tự

db.getCollection("customers").aggregate(
    [
        { 
            "$lookup" : {
                "from" : "housing", 
                "localField" : "address.zip_code", 
                "foreignField" : "Zip Code", 
                "as" : "address.zip_code.affordable_housing_options"
            }
        }, 
        { 
            "$project" : {
                "first" : 1.0, 
                "last" : 1.0, 
                "address.city" : 1.0, 
                "address.state" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Type" : 1.0, 
                "address.zip_code.affordable_housing_options.Property Name" : 1.0, 
                "address.zip_code.affordable_housing_options.Units" : 1.0, 
                "address.zip_code.affordable_housing_options.Zip Code" : 1.0
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

Bây giờ, hãy thêm giai đoạn thứ ba và lưu các tài liệu đầu ra này vào một bộ sưu tập mới bằng cách sử dụng giai đoạn $out

Sự khác biệt giữa $Group và $project trong MongoDB là gì?

$group được sử dụng để nhóm các tài liệu đầu vào theo biểu thức _id đã chỉ định và đối với mỗi nhóm riêng biệt, xuất ra một tài liệu. $project được sử dụng để chuyển các tài liệu có các trường được yêu cầu sang giai đoạn tiếp theo trong quy trình

Phép chiếu trong MongoDB là gì?

MongoDB Projection là một tính năng đặc biệt cho phép bạn chỉ chọn dữ liệu cần thiết thay vì chọn toàn bộ tập hợp dữ liệu từ tài liệu . Ví dụ: Nếu Tài liệu chứa 10 trường và chỉ có 5 trường được hiển thị thì có thể đạt được điều tương tự bằng cách sử dụng Phép chiếu.

Chúng tôi có thể sử dụng $in trong dự án MongoDB không?

Có thể sử dụng toán tử $in ở các giai đoạn $project hoặc $match của truy vấn tổng hợp , nhưng cách sử dụng và mục đích không hoàn toàn giống nhau ở mỗi giai đoạn.

Việc sử dụng $in trong truy vấn MongoDB là gì?

MongoDB cung cấp các loại toán tử truy vấn so sánh khác nhau và toán tử $in là một trong số đó. Toán tử này được sử dụng để chọn những tài liệu có giá trị của trường bằng với bất kỳ giá trị đã cho nào trong mảng .