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ử Show cú pháp { $unwind: <field path> } Những điểm cần nhớ
Thử nghiệm lấy mẫu1
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
đầ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.
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ườngNế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ảngXem 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à preserveNullAndEmptyArrays3. 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 |