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

Thăng cấp subfield lên cấp cao nhất trong projection MongoDB

Để đưa các subfield lên cấp cao nhất (top-level) trong projection mà không cần liệt kê tất cả khóa, sử dụng $objectToArray và $arrayToObject. Tạo collection:

> db.promoteSubfieldsDemo.insertOne({'s':10,'y':{'t':20,'u':30}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e038004190a577c668b55d5") }

Hiển thị tài liệu:

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

Kết quả - cấu trúc lồng nhau:

Aggregation pipeline thăng cấp subfield của "y" lên cấp cao nhất:

> db.promoteSubfieldsDemo.aggregate([
   { "$replaceRoot": {
      "newRoot": {
         "$arrayToObject": {
            "$concatArrays": [
               [{ "k": "s", "v": "$s" }],
               { "$objectToArray": "$y" }
            ]
         }
      }
   }}
]);

Kết quả - các trường t, u được đưa lên ngang hàng với s:

Giải thích: 1) $objectToArray chuyển object "y" thành mảng [{k:"t",v:20},{k:"u",v:30}], 2) $concatArrays gộp với mảng trường s, 3) $arrayToObject chuyển ngược lại thành object phẳng, 4) $replaceRoot thay thế root document.