Computer >> Máy Tính >  >> Lập trình >> MongoDB

Làm cách nào để di chuyển một mảng tài liệu nhúng lên trang gốc và thay đổi khóa / giá trị bằng đường dẫn tổng hợp?

Sử dụng $ ReplaceRoot trong tập hợp MongoDB. $ ReplaceRoot thay thế tài liệu đầu vào bằng tài liệu được chỉ định. Thao tác này sẽ thay thế tất cả các trường hiện có trong tài liệu đầu vào, bao gồm cả trường _id. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo733.insertOne(
...    {
...       "SubjectDetails":
...       [
...          {
...             SubjectName:"MongoDB",
...             "Marks":85
...          },
...          {
...             SubjectName:"MySQL",
...             "Marks":90
...          },
...          {
...             SubjectName:"PL/SQL",
...             "Marks":98
...          }
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac6e6156e85a39df5f6342")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo733.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5eac6e6156e85a39df5f6342"), "SubjectDetails" : [ { "SubjectName" : "MongoDB", "Marks" : 85 }, { "SubjectName" : "MySQL", "Marks" : 90 }, { "SubjectName" : "PL/SQL", "Marks" : 98 } ] }

Sau đây là truy vấn để di chuyển một mảng tài liệu được nhúng lên thành tài liệu gốc và thay đổi khóa / giá trị bằng đường dẫn tổng hợp -

> db.demo733.aggregate([
...    {
...       $replaceRoot: {
...          newRoot: {
...             $mergeObjects: [
..               . { _id: "$_id" },
...                { $arrayToObject: { $map: { input: "$SubjectDetails", in: [ "$$this.SubjectName", "$$this.Marks" ] } } }
...             ]
...          }
...       }
...    }
... ]).pretty()

Điều này sẽ tạo ra kết quả sau -

{
   "_id" : ObjectId("5eac6e6156e85a39df5f6342"),
   "MongoDB" : 85,
   "MySQL" : 90,
   "PL/SQL" : 98
}