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

Thay đổi thứ tự phần tử mảng trong MongoDB (Swap)

MongoDB không có toán tử built-in để trực tiếp đổi chỗ thứ tự phần tử mảng. Cách phổ biến là đọc tài liệu, hoán đổi giá trị trong ứng dụng (hoặc shell script), sau đó cập nhật lại toàn bộ mảng bằng $set.

Dữ liệu mẫu

> db.demo301.insertOne({"Name":["Chris","David","Bob"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d6ff55d93261e4bc9ea51") }

Xem dữ liệu gốc

> db.demo301.find();
{ "_id" : ObjectId("5e4d6ff55d93261e4bc9ea51"), "Name" : [ "Chris", "David", "Bob" ] }

Đổi chỗ phần tử 0 và 1 bằng script shell

> db.demo301.find({}, { Name : 1 }).forEach(function(n) {
...   var t = n.Name[0];
...   n.Name[0] = n.Name[1];
...   n.Name[1] = t;
...   db.demo301.update({ _id: n._id }, { $set: { Name: n.Name } });
...})

Kết quả sau khi chạy script

> db.demo301.find();
{ "_id" : ObjectId("5e4d6ff55d93261e4bc9ea51"), "Name" : [ "David", "Chris", "Bob" ] }

Lưu ý: Cách này yêu cầu đọc-ghi toàn bộ tài liệu, không phù hợp cho collection lớn hoặc cần atomicity. Từ MongoDB 5.2+, có thể dùng $arrayElemAt và $set trong aggregation pipeline với update để thực hiện phía server, nhưng phức tạp hơn. Đối với sắp xếp mảng, cân nhắc dùng $sortArray (MongoDB 5.2+) hoặc xử lý ở application layer.