Thư giãn trận đấu mongodb

Toán tử $unwind được sử dụng để giải cấu trúc các trường mảng. Cách giải cấu trúc hoạt động Đối với mỗi phần tử mảng, một tài liệu mới được tạo có phần tử đó ở vị trí của mảng trường. Điều này có nghĩa là việc áp dụng toán tử thư giãn trên trường mảng của một tài liệu chứa 10 phần tử sẽ tạo ra 10 tài liệu khác nhau có một trong các phần tử mảng thay vì trường mảng. Có thể xác định xem tài liệu mới có được tạo hay không trong trường hợp tài liệu không chứa trường mảng hoặc tài liệu trống

Toán tử giai đoạn $unwind của MongoDB được sử dụng để giải cấu trúc trường mảng từ tài liệu đầu vào để xuất tài liệu cho từng phần tử. Mọi tài liệu đầu ra là tài liệu đầu vào với giá trị của trường mảng được thay thế bằng phần tử

cú pháp

{ $unwind: <field path> }

Những điểm cần nhớ

  • Nếu giá trị của một trường không phải là một mảng, db. thu thập. tổng hợp () tạo ra lỗi
  • Nếu đường dẫn đã chỉ định cho một trường không tồn tại trong tài liệu đầu vào, đường dẫn sẽ bỏ qua tài liệu đầu vào và không hiển thị đầu ra
  • Nếu mảng trống trong tài liệu đầu vào, đường dẫn sẽ bỏ qua tài liệu đầu vào và không hiển thị đầu ra

Thử nghiệm lấy mẫu1

{
        "_id" : 1,
        "shirt" : "Half Sleeve",
        "sizes" : [
                "medium",
                "XL",
                "free"
        ]
}
{ "_id" : 2, "shirt" : "Full Sleeve", "sizes" : [ ] }

Thí dụ. thư giãn $

Giai đoạn tổng hợp $unwind sau đây được sử dụng để xuất tài liệu cho từng phần tử trong mảng kích thước

> db.test1.aggregate( [ { $unwind : "$sizes" } ] );

đầu ra

> db.test1.aggregate( [ { $unwind : "$sizes" } ] );
{ "_id" : 1, "shirt" : "Half Sleeve", "sizes" : "medium" }
{ "_id" : 1, "shirt" : "Half Sleeve", "sizes" : "XL" }
{ "_id" : 1, "shirt" : "Half Sleeve", "sizes" : "free" }

Ở đâ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

Giải cấu trúc một trường mảng từ tài liệu đầu vào để xuất tài liệu cho từng phần tử. Mỗi tài liệu đầu ra là tài liệu đầu vào với giá trị của trường mảng được thay thế bằng phần tử

Giai đoạn $unwind có một trong hai cú pháp.

  • Toán hạng là một đường dẫn trường

    { $unwind: <field path> }
    

    Để chỉ định đường dẫn trường, hãy thêm ký hiệu đô la vào trước tên trường $ và đặt trong dấu ngoặc kép.

  • Toán hạng là một tài liệu

    3. 2 新版功能

    {
      $unwind:
        {
          path: <field path>,
          includeArrayIndex: <string>,
          preserveNullAndEmptyArrays: <boolean>
        }
    }
    

FieldTypeDescription đường dẫn stringField đường dẫn đến một trường mảng. Để chỉ định đường dẫn trường, hãy thêm ký hiệu đô la vào trước tên trường $ và đặt trong dấu ngoặc kép. includeArrayIndex chuỗiTùy chọn. Tên của một trường mới để giữ chỉ mục mảng của phần tử. Tên không được bắt đầu bằng ký hiệu đô la $ . preserveNullAndEmptyArraysboolean

Tùy chọn. Nếu true , nếu đường dẫn rỗng, bị thiếu hoặc trống . Nếu $unwind outputs the document. If false , $unwind không xuất tài liệu nếu path is null, missing, or an empty array.

Giá trị mặc định là false .

Hành vi cư xử

Đường dẫn trường không phải mảng

在 3. 2 版更改. Giai đoạn $unwind không còn lỗi trên các toán hạng không thuộc mảng. Nếu toán hạng không phân giải thành một mảng nhưng không bị thiếu, null hoặc một mảng trống, thì $unwind coi toán hạng là một mảng phần tử đơn lẻ.

Trước đây, nếu một giá trị trong trường được chỉ định bởi đường dẫn trường không phải là một mảng, sẽ tạo ra lỗi

Thiếu trường

Nếu bạn chỉ định đường dẫn cho một trường không tồn tại trong tài liệu nhập hoặc trường là một mảng trống, $unwind , .

3. 2 新版功能. Để xuất tài liệu trong đó trường mảng bị thiếu, null hoặc mảng trống, hãy sử dụng tùy chọn preserveNullAndEmptyArrays .

ví dụ

Thư giãn mảng

Xem xét khoảng không quảng cáo với tài liệu sau.

{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }

Việc tổng hợp sau đây sử dụng giai đoạn $unwind để xuất tài liệu cho từng thành phần trong kích thước . array:

db.inventory.aggregate( [ { $unwind : "$sizes" } ] )

Hoạt động trả về kết quả sau

________số 8_______

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 hiện giữ giá trị từ sizes array.

参见

邮政编码数据集的聚合, 对用户爱好数据做聚合

includeArrayIndex và preserveNullAndEmptyArrays

3. 2 新版功能

Một bộ sưu tập khoảng không quảng cáo có các tài liệu sau.

{ "_id" : 1, "item" : "ABC", "sizes": [ "S", "M", "L"] }
{ "_id" : 2, "item" : "EFG", "sizes" : [ ] }
{ "_id" : 3, "item" : "IJK", "sizes": "M" }
{ "_id" : 4, "item" : "LMN" }
{ "_id" : 5, "item" : "XYZ", "sizes" : null }

Các thao tác $unwind sau đây là tương đương và trả về một tài liệu cho từng phần tử trong size< . Nếu trường field. If the size không phân giải thành mảng nhưng không thiếu, null hoặc mảng trống, $ . treats the non-array operand as a single element array.

db.inventory.aggregate( [ { $unwind: "$sizes" } ] )
db.inventory.aggregate( [ { $unwind: { path: "$sizes" } } ] )

Hoạt động trả về các tài liệu sau

{ "_id" : 1, "item" : "ABC", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC", "sizes" : "L" }
{ "_id" : 3, "item" : "IJK", "sizes" : "M" }

Thao tác $unwind sau sử dụng tùy chọn includeArrayIndex .

db.inventory.aggregate( [ { $unwind: { path: "$sizes", includeArrayIndex: "arrayIndex" } } ] )

Thao tác mở rộng mảng size và bao gồm chỉ mục mảng của chỉ mục mảng trong mới . Nếu trường field. If the size không phân giải thành một mảng nhưng không thiếu, null hoặc một mảng trống, thì . field is null.

{ "_id" : 1, "item" : "ABC", "sizes" : "S", "arrayIndex" : NumberLong(0) }
{ "_id" : 1, "item" : "ABC", "sizes" : "M", "arrayIndex" : NumberLong(1) }
{ "_id" : 1, "item" : "ABC", "sizes" : "L", "arrayIndex" : NumberLong(2) }
{ "_id" : 3, "item" : "IJK", "sizes" : "M", "arrayIndex" : null }

Thao tác $unwind sau sử dụng tùy chọn preserveNullAndEmptyArrays . sizes field is missing, null or an empty array.

{
  $unwind:
    {
      path: <field path>,
      includeArrayIndex: <string>,
      preserveNullAndEmptyArrays: <boolean>
    }
}
0

Ngoài việc mở ra các tài liệu trong đó kích thước là một mảng các phần tử hoặc một trường không null, không phải mảng, thao tác . sizes field is missing, null or an empty array:

{
  $unwind:
    {
      path: <field path>,
      includeArrayIndex: <string>,
      preserveNullAndEmptyArrays: <boolean>
    }
}
1

←   $skip (tập hợp) $group (tập hợp)  →

© MongoDB, Inc 2008-2017. MongoDB, Mongo và logo chiếc lá là các nhãn hiệu đã đăng ký của MongoDB, Inc

Thư giãn có nghĩa là gì trong MongoDB?

Định nghĩa. thư giãn $. Giải cấu trúc trường mảng từ tài liệu đầu vào để xuất tài liệu cho từng phần tử . Mỗi tài liệu đầu ra là tài liệu đầu vào với giá trị của trường mảng được thay thế bằng phần tử.

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.

Thư giãn được sử dụng để làm gì?

MongoDB $unwind chuyển các tài liệu phức tạp thành các tài liệu đơn giản hơn, giúp tăng khả năng đọc và hiểu . Điều này cũng cho phép chúng tôi thực hiện các hoạt động bổ sung, như nhóm và sắp xếp trên kết quả đầu ra.

Làm cách nào để khớp giá trị mảng trong MongoDB?

Toán tử $elemMatch khớp với các tài liệu chứa trường mảng có ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định. Nếu bạn chỉ xác định một điều kiện