Việc sử dụng thư giãn trong MongoDB là gì?

A. Tổng hợp là tất cả về các tài liệu di chuyển từ giai đoạn này sang giai đoạn khác trên một quy trình sản xuất ảo giúp giảm đầu vào từ một khối tài liệu thành một tập hợp dữ liệu được chuyển đổi hoàn toàn. Studio 3T Aggregation Editor làm cho điều này dễ dàng hơn bằng cách làm cho quy trình dễ quản lý hơn

Nhưng nó hơi phản trực giác khi bạn gặp giai đoạn

{
    path: "$types"
}
3. Giai đoạn này lấy một tài liệu và biến nó thành nhiều bản sao của cùng một tài liệu. Tại sao, mặc dù?

Thư giãn cơ bản

Vâng,

{
    path: "$types"
}
4 là tất cả về mảng. Một tài liệu trong đường dẫn với một mảng trên mỗi trường gần như không thể xử lý được; . Hãy tưởng tượng một tài liệu

{ 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : [
        {
            "name" : "Red Leicester", 
            "stock" : 5.0
        }, 
        {
            "name" : "Tilsit", 
            "stock" : 2.0
        }, 
        {
            "name" : "Caerphilly", 
            "stock" : 10.0
        }, 
        {
            "name" : "Bel Paese", 
            "stock" : 1.0
        }, 
        {
            "name" : "Red Windsor", 
            "stock" : 5.0
        }, 
        {
            "name" : "Stilton", 
            "stock" : 10.0
        }
    ], 
    "_id" : ObjectId("61715908eda5d43b15939c09")
}

Chúng tôi có một loạt sản phẩm, nhà cung cấp và một loạt các loại với mức tồn kho. Tập hợp không biết cách dừng và tìm hiểu kỹ một mảng như vậy, vì vậy chúng tôi muốn chia nó thành các tài liệu thân thiện với tập hợp nhỏ hơn. Và đó là những gì

{
    path: "$types"
}
3 làm. Bạn trỏ thư giãn vào một mảng trong tài liệu và nó tạo một tài liệu cho mỗi mục trong mảng. Các tài liệu kết quả chỉ đơn giản là tài liệu gốc với mảng được thay thế bởi mỗi mục nhập. Hãy giải phóng ví dụ sến sẩm của chúng ta bằng giai đoạn tổng hợp
{
    path: "$types"
}
3 chỉ có thế này.  

{
    path: "$types"
}

Vì vậy, tham số

{
    path: "$types"
}
2 của
{
    path: "$types"
}
3 là mảng chúng ta muốn làm việc với. Nếu chúng tôi cung cấp tài liệu ở trên, chúng tôi sẽ lấy các tài liệu này ra

{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Red Leicester", 
        "stock" : 5.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Tilsit", 
        "stock" : 2.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Caerphilly", 
        "stock" : 10.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Bel Paese", 
        "stock" : 1.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Red Windsor", 
        "stock" : 5.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Stilton", 
        "stock" : 10.0
    }
}

Mỗi loại phô mai hiện có tài liệu riêng. Và bây giờ chúng ta có thể mang lại sức mạnh tổng hợp cho các vấn đề. Giả sử chúng tôi muốn tổng lượng hàng trong phạm vi “Phô mai” (và bất kỳ phạm vi nào khác). Chúng ta có thể có một giai đoạn tổng hợp khác, nhóm các tài liệu theo phạm vi và sau đó tổng hợp số lượng hàng tồn kho. Đó sẽ là giai đoạn

{
    path: "$types"
}
3 với các cài đặt này

{
    _id: "$range",
    totalStock: { $sum: "$types.stock" }
}

Sản xuất

{
    "_id" : "Cheese",
    "totalStock": 33.0
}

Vì vậy, bằng cách hủy một mảng để tạo nhiều tài liệu, việc tổng hợp sẽ thực hiện công việc của nó dễ dàng hơn nhiều, tổng hợp các giá trị. Tất cả điều này diễn ra trong quy trình tổng hợp và (thường) không phải trên đĩa nên việc tạo nhiều tài liệu nhỏ không phải là vấn đề

Hãy nghĩ về

{
    path: "$types"
}
3 giống như một chiếc bàn là, mài nhẵn những mảng sần sùi thành những tài liệu dễ xử lý hơn

Bảo toàn các chỉ mục mảng thông qua thư giãn

Đó là phần thiết yếu của

{
    path: "$types"
}
3. Tất nhiên, có nhiều hơn thế. Mảng có thứ tự và thao tác tháo gỡ sẽ xóa thứ tự đó khỏi ngày. Để lưu giữ thông tin đó, giai đoạn
{
    path: "$types"
}
3 có tham số
{
    path: "$types"
}
7. Điều này cho phép bạn chỉ định tên của một trường sẽ được thêm vào với số chỉ mục mảng vào tài liệu đã tạo. Thực tế, nếu giai đoạn
{
    path: "$types"
}
3 của chúng ta trông như thế này

________số 8

Sau đó, các tài liệu kết quả sẽ bao gồm một trường

{
    path: "$types"
}
9

{
    path: "$types"
}
0

NULL có liên quan gì đến nó?

Có một điều chúng tôi chưa đề cập đến. điều gì xảy ra nếu không có trường nào khớp với đường dẫn hoặc đường dẫn tồn tại nhưng có giá trị null? .  

Và đó là lý do tại sao có

{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Red Leicester", 
        "stock" : 5.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Tilsit", 
        "stock" : 2.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Caerphilly", 
        "stock" : 10.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Bel Paese", 
        "stock" : 1.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Red Windsor", 
        "stock" : 5.0
    }
}
{ 
    "_id" : ObjectId("61715908eda5d43b15939c09"), 
    "range" : "Cheese", 
    "supplier" : "Cheese Shop", 
    "types" : {
        "name" : "Stilton", 
        "stock" : 10.0
    }
}
0 làm tham số tùy chọn thứ ba cho
{
    path: "$types"
}
3. Đặt giá trị này thành true và
{
    path: "$types"
}
3 sẽ tạo tài liệu, với giá trị null ở vị trí giá trị mảng và giá trị null ở vị trí chỉ mục.  

Điều này tránh làm mất hoàn toàn tài liệu nhưng bạn phải đảm bảo rằng phần còn lại của tập hợp của bạn cho phép các giá trị null này.  

Hãy tử tế, thư giãn

Như bạn có thể thấy,

{
    path: "$types"
}
3 là một cách tuyệt vời để kéo các mảng ra khỏi tài liệu của bạn để tính năng tổng hợp có thể hoạt động với dữ liệu bên trong chúng. Được kết hợp với
{
    path: "$types"
}
3, nó cung cấp khả năng định hình lại hoàn toàn dữ liệu của bạn để bạn có thể trích xuất thông tin chi tiết mới từ dữ liệu đó

Việc sử dụng thư giãn trong MongoDB là gì?

Thao tác mở mảng kích thước và đưa chỉ mục mảng vào trường Chỉ số mảng mới . Nếu trường kích thước không phân giải thành một mảng đã điền nhưng không thiếu, null hoặc một mảng trống, thì trường ArrayIndex là null.

Thư giãn trong tổng hợp là gì?

Ví dụ. thư giãn $ . Ở đây từ kết quả cho thấy rằng, mỗi tài liệu giống hệt với tài liệu đầu vào ngoại trừ giá trị của trường kích thước chứa giá trị từ mảng kích thước ban đầu. used to output a document for each element in the sizes array. Here from the result it shows that, each document is identical to the input document except for the value of the sizes field that contain the value from the original sizes array.

Việc sử dụng dự án trong MongoDB là gì?

$project lấy một tài liệu có thể chỉ định việc bao gồm các trường, loại bỏ trường _id, thêm các trường mới và đặt lại giá trị của các trường hiện có . Ngoài ra, bạn có thể chỉ định loại trừ các trường. Chỉ định bao gồm một lĩnh vực. . Alternatively, you may specify the exclusion of fields. Specifies the inclusion of a field.

$all trong MongoDB là gì?

$all. Toán tử $all chọn các tài liệu có giá trị của trường là một mảng chứa tất cả các phần tử đã chỉ định .